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

时间:2015-11-03 15:40:47

标签: 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是否安全?在我看来它会是,但事情并不总是像我们期望的那样工作。

谢谢。

1 个答案:

答案 0 :(得分:1)

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

因此,使用referencesA初始化&a 是安全的,如果有点脆弱的话。在您的情况下,a是默认构造成员{{1}}的地址。

如果有人更改了班级成员的顺序,我建议不要这样编码。