我遇到了内存违规错误,我不知道它从哪里来。
我的问题是:我是否可以在构造函数初始化列表中获取类成员的地址,以便可以将其传递给需要对其进行引用的对象?
例如 :
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
的地址。
我建议不要像这样进行编码,以防有人更改您类成员的顺序。