我应该分配或重置一个unique_ptr

Should I assign or reset a unique_ptr?

本文关键字:一个 unique ptr 分配 我应该      更新时间:2023-10-16

考虑到被拥有对象的生命周期与其所有者相关联的常见情况,我可以使用两种方法之一的唯一指针。

可赋值:

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());
    }
};

为了最佳实践,我应该更喜欢其中一种形式而不是另一种形式吗?

EDIT:对不起,伙计们。我对它进行过化简。堆分配发生在initialize方法中,而不是在actor中。因此,我不能使用初始化列表。

摘自unique_ptroperator=文档:

将r指向的对象的所有权转移到*this,就像调用reset(r.release())然后从std::forward<E>(r.get_deleter())赋值一样。

你所需要的只是reset调用,所以直接调用它会更简单

正确的方法是使用owned的构造函数:

owner() : owned(new someObject())
{}

除此之外,我更喜欢reset,因为在这种情况下你不会创建一个无用的中间实例(即使在机器级别上可能没有区别,因为优化器可以在那里做很多事情)。