2
假设我有下面的类结构:何时指向成员变量的指针变为有效?
class A
{
public:
A(int test) : _test(test) { /* do nothing */ }
private:
int _test;
};
class B
{
public:
B(A* a) : _a(a) { /* do nothing */ }
private:
A* _a;
};
class C : public B
{
public:
C() : B(&a), a(5) { /* do nothing */ }
private:
A a;
};
我与地址C
的成员变量a
调用构造函数来B
之前,我初始化a
。因此,在我初始化a
之前,对B::*_a
的任何访问都将不确定。但是,在初始化a
之前,甚至将B::_a
设置为&a
也是未定义的行为?也就是说,只要构造函数被调用,或仅在构造函数的a(5)
指令被调用时,C::a
才会被分配内存。
只需存储指针即可。取消引用它不是,直到成员初始化。 –