【发布时间】:2019-12-03 15:28:50
【问题描述】:
所以我对 C++ 很陌生,我正在尝试将 std::unique_ptr 与返回 std::optional 的命名构造函数结合起来。我有以下结构:
class AbstractClass {
public:
virtual ~AbstractClass() {}
};
class ChildClassA : public AbstractClass {
public:
static std::optional<ChildClassA> construct(...) { ... }
private:
ChildClassA(...) : ...{...} { ... }
};
std::unique_ptr<AbstractClass> construct(...) {
if (...) {
return std::make_unique<ChildClassA>(...); // call ChildClassA::construct(...) here
} else {
return std::make_unique<ChildClassB>(...); // call ChildClassB::construct(...) here
}
}
我想要一个函数construct(),它根据某个值调用其中一个子类的构造函数。这些子类的构造函数可能会失败,因此我使用命名构造函数返回std::optional,如here 所述。 construct() 应返回 std::unique_ptr 以明确传递所有权并防止复制构造的对象。
这可能吗?
【问题讨论】:
-
仅当您的子类可移动时
-
更改工厂函数以返回 null
unique_ptrs 而不是std::optional会简单得多
标签: c++ optional unique-ptr named-constructor