正在更改类成员地址

Changing class member address

本文关键字:成员 地址      更新时间:2023-10-16

总结:

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


是什么导致我提出这个问题:

我不确定我想做的事情是否会导致我预期的行为,即使它像预期的那样起作用,我也不确定它是否是我应该做的

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

在文档中,它说如果属性不存在,指针可能为null,尽管我不确定它是否会将其设置为null,或者是因为它希望我输入指向函数的null指针。

因此,我不使用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));
}
};

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

更改类成员地址

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

假设你有:

struct Foo
{
int a;
};
Foo f;

创建f后,ff.a的地址不可更改。您只能修改它们的值。