gpt4 book ai didi

c++ - 在 C++ 中,当它们具有依赖项时,我应该如何在初始化列表中强制执行组合对象构造函数的顺序

转载 作者:太空宇宙 更新时间:2023-11-03 10:42:18 26 4
gpt4 key购买 nike

如果我有一个组合其他具有相互依赖性的对象的类,我应该(如何)强制执行它们的构造顺序?

例如

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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com