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

Pio*_*cki 14 c++ smart-pointers shared-ptr unique-ptr

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

class A
{
public:
   std::unique_ptr pointer;
// class body
};
Run Code Online (Sandbox Code Playgroud)

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

我的问题是 - 是否有可能将所有权转移std::shared_ptrstd::unique_ptr,如果是,我该怎么做?

Naw*_*waz 14

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

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

然后你评论说:

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

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

  • 好吧,实际上这个场景刚刚合法地出现在我身上,因为我的代码使用`unique_ptr`(有充分的理由),但是我必须从lib中获取无法处理不可复制类型的数据.当然,我想修复lib,但上游和部署需要时间,所以你有它. (4认同)