我遇到了内存违规错误,我不知道它从哪里来。
我的问题是:我是否可以在构造函数初始化列表中获取类成员的地址,以便可以将其传递给需要对其进行引用的对象?

例如 :

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的地址。

我建议不要像这样进行编码,以防有人更改您类成员的顺序。

10-05 21:13