如果我有一个组合其他具有相互依赖性的对象的类,我应该(如何)强制执行它们的构造顺序?
例如
class Parent
{
Child1 c1;
Child2 c2;
};
假设 Child2 的构造函数需要一个 Child1&,我想将 c1 传递给 c2 构造函数。
如果我只执行以下...
Parent::Parent()
: c2(c1)
{
}
...这可能不是一件好事,因为在运行 c2 的初始化程序时 c1 可能尚未构造?或者在类声明中 c1 在 c2 之前就足够了吗?
或者我应该显式地引用 c1 构造函数(如果这不是必需的,那么这样做以使其显式化是一个好习惯吗?)。例如
class Parent
{
Child1 c1;
Child2 c2;
};
Parent::Parent()
: c1()
: c2(c1)
{
}
最佳答案
成员总是按照声明的顺序构造。所以如果你有:
class Parent
{
Child1 c1;
Child2 c2;
};
你保证 c1
将在 c2
之前构造。所以,如果 c2
需要一个 Child1&
,那么这是完美定义的:
Parent::Parent()
: c2(c1)
{
}
c1
将被默认构造,然后 c2
将使用绝对已经构造的 c1
构造。
关于c++ - 在 C++ 中,当它们具有依赖项时,我应该如何在初始化列表中强制执行组合对象构造函数的顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33018933/