将所有权从std :: shared_ptr移至std :: unique_ptr

时间:2013-03-11 11:30:06

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

我有一个班级A,其字段为std::unique_ptr

class A
{
public:
   std::unique_ptr pointer;
// class body
};

在代码中的某个地方,我使用的std::shared_ptr s很少指向同一个对象。现在我想要实现的是将所有权移到我班级中的std::unique_ptr,这样如果所有shared_ptr都被销毁,我的对象将保持活着,只要{{1}将活着。

我的问题是 - 是否可以将所有权从unique_ptr转移到std::shared_ptr,如果是,我该怎么办呢?

1 个答案:

答案 0 :(得分:14)

逻辑上这样的场景对我来说没有意义。

假设有一段时间可以转让所有权,但只有当确定只有一个 {{1}时才可以 alives;如果是这种情况,那么您仍然可以使用shared_ptr作为shared_ptr的成员,并假装它是A

然后你评论道:

  

这是真的,我可以在A班中创建unique_ptr。我想我再次误解了一个概念。我希望以这种方式表现:如果shared_ptr死亡,对象本身也会死亡,即使unique_ptr仍然指向它,但那是愚蠢的,因为他们不知道对象本身已被破坏因此他们不会shared_ptr s。

在这种情况下,你正在查看错误的智能指针。您可能需要的是std::weak_ptr。如果是,请确保使用一个std::shared_ptr,其他所有人使用nullptr