【发布时间】:2018-03-07 17:31:28
【问题描述】:
我需要创建一个shared_ptr 或者null 或者包含一个类Bar 的实例。
下面的方法不起作用,因为Bar 和nullptr 不是同一类型。怎样才能做到这一点?
class Bar {};
class Foo {
private:
shared_ptr<Bar> b;
public:
Foo() : b(true ? Bar() : nullptr) {
}
};
【问题讨论】:
-
对于一般的这种模式(即计算初始化器),您可以使用私有辅助函数来生成初始值。在内联、移动语义和 RVO 之间,这种方法的开销可以几乎为零。
-
另外,您可以有 2 个不同的 Foo 构造函数,其中一个接受 bar 的参数,另一个创建一个 nullptr。
标签: c++ c++11 constructor shared-ptr