假设类D
维护类C
的对象向量,并假设向量的前三个元素应该可以通过数据成员field0 .. field2
访问,这些成员是类C
的对象。
如果我们在声明时初始化数据成员field0 .. field2
,并且D
的任何构造函数都没有使用显式的mem-initializer列表,那么它是否保证数据成员将始终初始化为对向量中保存的对象的正确引用(如果我们考虑子类化,复制,移动,...类D
的对象)?
请注意,问题不是关于初始化的顺序,而是更多关于"使用D类(包括子类)的任何事情都可以防止数据成员被初始化"?
class C{
};
class D{
protected:
std::vector<C> myC = std::vector<C>(3);
public:
C &field0 = myC[0];
C &field1 = myC[1];
C &field2 = myC[2];
D () {}; // no mem-initializers
};