我应该分配还是重置unique_ptr?

时间:2013-04-17 13:29:30

标签: c++ c++11 smart-pointers unique-ptr

鉴于自有对象的生命周期与其所有者相关联的常见情况,我可以使用两种方式之一的唯一指针。 。

可以分配:

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中。因此,我无法使用初始化列表。

2 个答案:

答案 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,因为在这种情况下您不会创建无用的中间实例(即使机器级别可能没有差异,因为优化器可以在那里做很多事情)。