我发生了内存违规错误,我不知道它来自哪里。 我的问题是:我是否允许在构造函数初始化列表中获取类成员的地址,以便我可以将它传递给需要引用它的对象?
例如:
class A
{
};
class ReferencesA
{
A * const pA;
ReferencesA( A * ptrA ) : pA( ptrA ) { }
};
class B
{
A a;
ReferencesA referencesA;
B() : referencesA( & a ) { }
};
构造函数初始化列表中的& a
是否安全?在我看来它会是,但事情并不总是像我们期望的那样工作。
谢谢。
答案 0 :(得分:1)
a
中基本成员的初始化顺序为referencesA
,然后是&a
。那是因为它们在类声明中以那个顺序出现 。 (它们在构造函数的初始化列表中出现的顺序(如果有的话)是不相关的。)
因此,使用referencesA
初始化&a
是安全的,如果有点脆弱的话。在您的情况下,a
是默认构造成员{{1}}的地址。
如果有人更改了班级成员的顺序,我建议不要这样编码。