C++在构造函数初始化列表中获取类成员地址
我遇到内存违规错误,我不知道它来自哪里。 我的问题是:我允许在构造函数初始化列表中获取类成员的地址,以便我可以将它传递给需要对其进行引用的对象?C++在构造函数初始化列表中获取类成员地址
例如:
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
的地址。
我建议不要这样编码,以防有人更改班上成员的顺序。
谢谢。问题是,如果我想要const指针(或引用)来指示指针将在对象的整个生命周期中是相同的和有效的,那么我需要初始化初始化器列表中的东西,否则我可以'使用const。 – Virus721
值得注意的是,保存指向未初始化对象的指针是安全的,所以类中的顺序并不重要。如果你想通过指针来读或写,'a'只需要在班级列表中首先出现。 –
对我来说没关系。这可能是“引用A”对引起崩溃的内存中的ptrA做了什么,特别是如果“a”尚未构建。 – rakeshdn