C++在构造函数初始化列表中获取类成员地址

标签 c++ class pointers constructor

我有一个内存冲突错误,我不知道它来自哪里。 我的问题是:我是否可以在构造函数初始化列表中获取类成员的地址,以便我可以将它传递给需要引用它的对象?

例如:

class A
{
};

class ReferencesA
{
    A * const pA;

    ReferencesA( A * ptrA ) : pA( ptrA ) { }
};

class B
{
    A a;

    ReferencesA referencesA;

    B() : referencesA( & a ) { }
};

构造函数初始化列表中的 &a 是否安全?在我看来是这样,但事情并不总是像我们预期的那样。

谢谢。

最佳答案

class B中基类成员的初始化顺序是a,然后是referencesA。那是因为它们按此顺序出现在类声明中。 (它们出现的顺序,如果有的话,在构造函数的初始化列表中是不相关的。)

因此,使用 &a 来初始化 referencesA 安全的,即使有点脆弱。在您的例子中,&a 是默认构造的成员 a 的地址。

我建议不要这样编码,以防有人更改您类(class)中成员的顺序。

关于C++在构造函数初始化列表中获取类成员地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33503206/

相关文章:

c++ - 错误11 error LNK2005 : "class cv::Mat imageOutput" (? imageOutput@@3VMat@cv@@A) 已经定义在My​​Form.obj

ruby - Date::today 未定义?

uint8_t 到字符串的转换 [C]

python - 为什么定义类时括号是可选的,而定义函数时是必须的?

php - 为什么在构造函数的站点外的类中声明变量?

c - 无法访问字符指针数组

c++ - 关于初始化引用指针的问题

c++ - 如何使 FFTW 希尔伯特变换计算得更快?

python - 当我使用Thrift将C++中的映射序列化到磁盘,然后使用Python反序列化时,我没有得到相同的对象

c++ - WIA 2.0,C++:IWiaDevMgr2::EnumDeviceInfo 未检测到已连接的相机