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