gpt4 book ai didi

c++ - 必须推迟成员变量的初始化。该类(class)的最佳设计选择是什么?

转载 作者:行者123 更新时间:2023-11-30 05:09:44 25 4
gpt4 key购买 nike

假设我们有

class Foo
{
public:
Foo(A a, B b);
//other member functions and variables
}

class Bar
{
public:
Bar();
private:
Foo foo;
//other member variables
}

最好是成员(member) fooclass Bar应该使用初始化列表进行初始化。但是如果 foo 的初始化取决于 Bar 中的一些操作的构造函数,初始化列表将不是一个选项。自 foo在输入 Bar 之前必须进行初始化的构造函数,这里的最佳设计选择是什么?

我四处搜索并找到了一些选项,例如 std::unique_ptr<Foo> pfoo; ( Best practice for deferred initialization of private class members ),但我觉得这个设计有点草率。

我想避免使用原始指针 Foo *尽可能。

预先感谢您的输入!

最佳答案

你可以替换有问题的:

class Bar
{
public:
Bar()
{
const Data& data = ComplexFunction();
// How initialize foo ?
}
private:
Foo foo;
//other member variables
};

通过类似的东西:

class Bar
{
public:
Bar() : Bar(ComplexFunction()) {} // Delegate constructor

private:
Bar(const Data& data) : foo(data.a, data.b) {}

private:
Foo foo;
//other member variables
};

如果你真的想推迟 Foo 的构建(使用两步初始化),我会使用 optional(boost 如果 std 一个不适合你 (C++17))。

关于c++ - 必须推迟成员变量的初始化。该类(class)的最佳设计选择是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46007635/

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