更改 class 会员地址

Changing class member address

总结:

是否可以更改 class 成员 属性 内存地址?


是什么让我做这道题:

我不确定我想做的事情是否会导致我预期的行为,即使它按预期工作,这是否是我应该做的。

所以,我有一个成员 属性,我想从磁盘读取它,例如,它是 MyClass 中的 prop。我从磁盘 getVarOnFile 读取 属性 的例程我无权访问该实现,但它使用指向该类型的指针来填充文件中的值。

在文档中它说如果 属性 不存在,指针可能为空,虽然我不确定它是否会将其设置为空或者是因为它希望我输入空指针到功能。

因此,我没有使用 destVar 指针本身,而是使用 localVar 指针,然后将 destVar 设置为 localVar

但我不确定是否应该这样做,这似乎会分段内存,其中大多数成员在内存中很接近,但不是我设置为文件保留的内存位置的这个.

void readHelper(const char* propOnFile, float*& destVar)
{
  // check if propOnFile exists
  float *localVar = nullptr; 
  getFileOnVar(propOnFile,localVar);
  if ( localVar != nullptr){
    destVar
  }
}

class MyClass {
  private:
    float prop;
  public:
    static MyClass *read(const char* file){
      readHelper("prop",&(this->prop));
    }
};

我不确定原来为class属性成员保留的内存位置会发生什么变化,被替换到新位置。它将被释放或者这将是内存泄漏?

Changing class member address

如果我没有正确理解你的问题,那是不可能的。

假设你有:

struct Foo
{
   int a;
};

Foo f;

一旦您创建了fff.a的地址就不可更改。您只能修改它们的值。