将所有权从std::shared_ptr移动到std::unique_ptr

Move ownership from std::shared_ptr to std::unique_ptr

本文关键字:ptr std unique 移动 shared 所有权      更新时间:2023-10-16

我有一个类A,它的字段类型为std::unique_ptr:

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

在代码的某个地方,我使用了几个指向相同对象的std::shared_ptr s。现在我想要实现的是将所有权转移到我的类中的这个std::unique_ptr,这样如果所有的shared_ptr将被销毁,我的对象将保持存活,只要这个unique_ptr将保持存活。

我的问题是-是否有可能将所有权从std::shared_ptr移动到std::unique_ptr,如果是,我该如何做到这一点?

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

假设有可能转移所有权,但是只有当你确定只有一个 shared_ptr存活时,你才能这样做;如果是这种情况,那么您仍然可以使用shared_ptr作为A的成员,并且假装unique_ptr

然后你评论:

那是真的,我可以在A类中创建shared_ptr。我想我又误解了一个概念。我想这样做:如果unique_ptr死亡,对象本身也会死亡,即使shared_ptr s仍然指向它,但这很愚蠢,因为它们不知道对象本身已被销毁,因此它们不会是nullptr s。

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