鉴于自有对象的生命周期与其所有者相关联的常见情况,我可以使用两种方式之一的唯一指针。 。
可以分配:
class owner
{
std::unique_ptr<someObject> owned;
public:
owner()
{
owned=std::unique_ptr<someObject>(new someObject());
}
};
可以使用重置方法:
class owner
{
std::unique_ptr<someObject> owned;
public:
owner()
{
owned.reset(new someObject());
}
};
为了最佳实践,我应该选择一种形式而不是另一种形式吗?
编辑:很抱歉。我简化了这个。堆分配发生在初始化方法中,而不是在ctor中。因此,我无法使用初始化列表。
答案 0 :(得分:35)
来自the docs of unique_ptr
's operator=
:
将r指向的对象的所有权转移给*,就像调用
reset(r.release())
后跟std::forward<E>(r.get_deleter())
的作业一样。
所有你需要的是reset
电话,所以直接调用它更简单
答案 1 :(得分:15)
执行此操作的正确方法(您未列出)是使用owned
的构造函数:
owner() : owned(new someObject())
{}
除此之外,我更喜欢reset
,因为在这种情况下您不会创建无用的中间实例(即使机器级别可能没有差异,因为优化器可以在那里做很多事情)。