gpt4 book ai didi

c++ - 我应该在 C++ 中使用构造函数还是初始化函数

转载 作者:搜寻专家 更新时间:2023-10-31 02:10:26 25 4
gpt4 key购买 nike

有一个B类有A类成员m_a

class A{
A(...);
~A();
init(...);
...//other methods;
...//data
}

为了用某个值初始化 m_a,我可以使用构造函数或 init() 函数。如果我使用构造函数,并且无法在 B 类构造函数中确定值,我将不得不使用 A* m_anew A(...)稍后初始化。或者如果我使用 init() 函数,我可以只使用 A a 作为 B 类的成员。那么在这种情况下,init() 函数是更好的方法吗?

最佳答案

您应该更喜欢在构造函数中或内联(直接在您声明它们的地方)初始化所有成员,除非您有很好的理由不这样做。

如果为此使用 init 风格的函数,您就打开了使用尚未初始化的对象的可能性。

我建议在不知道 m_a 应具有什么值的情况下无法实例化 B 对象。为此,您应该为 B 使用一个带有 A 参数的构造函数:

class B {
public:
explicit B(A a)
: m_a(std::move(a))
{ }

private:
A m_a;
};

这样,就不可能在不知道 m_a 应该用什么初始化的情况下创建 B 对象:

B b; // error

B 的用户被迫为 B::m_a 提供一个值,因此不能使用未初始化的 B 对象:

B b(A());

如果您想知道 std::move 是什么,它允许将 a 参数移动到 m_a 成员中而无需复制,哪个更快。要阅读更多相关信息,请搜索“C++ 移动语义”。但是,这是可选的,并不是上述示例工作所必需的。

关于c++ - 我应该在 C++ 中使用构造函数还是初始化函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45250839/

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