【发布时间】:2020-11-18 20:30:38
【问题描述】:
好的,试着写一段和我的实际情况比较相似的代码,请以它为例,它不必编译:
class A
{
public:
A() = delete;
A(int value);
...
}
class B
{
unique_ptr<A> a;
C c;
B() { a = make_unique<A>(c.getValue()); }
}
class C
{
public:
C();
int getValue() { return <an int value based on something>; }
}
现在我希望我的问题更清楚,因为一些限制我不能将 int 值传递给 B 构造函数,然后我不能使用初始化列表。那么,我的 unique_ptr 解决方案是首选方案吗?再次感谢。
【问题讨论】:
-
您更好的 C++ 解决方案无法编译,因为
args未声明。 -
除了
std::unique_ptr<T>,还要考虑std::optional<T>,它将T放在自身内部,而不是堆上。 -
如果
B知道args(如指针变体中所建议的那样),那么您正在寻找member initializer list。不需要指针或选项。 -
我第二个 Yksisarvinen。在我看来,您的整个困境都基于在您的 c'tor 主体中使用赋值而不是初始化的习惯。这是a habit worth breaking。
-
请编辑以提供有关您的特定用例的更多详细信息。目前还不清楚,为什么你认为你需要一个默认的构造函数并在以后“初始化”。
标签: c++ class smart-pointers member raii