【发布时间】:2020-12-14 09:40:13
【问题描述】:
我的班级结构如下:
class S {
public:
S() {}
};
class T {
private:
std::unique_ptr<S> a;
T(S);
public:
static std::unique_ptr<T> make_item() {
std::unique_ptr<S> s_instance = std::make_unique<S>();
return std::make_unique<T>(std::move(s_instance));
}
};
但是,当我尝试在 make_item 中创建一个 unique_ptr 时,它会将构造函数视为私有的。
有没有办法允许在类本身的静态成员函数中使用私有构造函数?因为一个成员是 S 的 unique_ptr(一个相当重的对象),我们不希望使用副本。
【问题讨论】:
-
我支持重复的命题,但
std::make_unique可以替换为std::unique_ptr<X>(new X);而不会造成任何性能损失,因此不需要该问题的技巧。 -
@Yksisarvinen 但这不是例外安全的!如果这个约束是相关的,工厂模式是更好的方法。
-
@Yksisarvinen “没有任何性能损失”是指不考虑额外分配?
标签: c++ unique-ptr