C++ 将所有权从std::shared\u ptr移动到std::unique\u ptr

C++ 将所有权从std::shared\u ptr移动到std::unique\u ptr,c++,shared-ptr,smart-pointers,unique-ptr,C++,Shared Ptr,Smart Pointers,Unique Ptr,我有一个类a,它的字段类型为std::unique\u ptr: class A { public: std::unique_ptr pointer; // class body }; 在代码的某个地方,我使用了几个指向同一对象的std::shared_ptrs。现在,我想要实现的是将所有权转移到我的类中的这个std::unique_ptr,这样,如果所有共享的_ptr都将被销毁,那么只要这个unique_ptr保持活动状态,我的对象就会保持活动状态 我的问题是-是否有可能将所有权从st

我有一个类
a
,它的字段类型为
std::unique\u ptr

class A
{
public:
   std::unique_ptr pointer;
// class body
};
在代码的某个地方,我使用了几个指向同一对象的
std::shared_ptr
s。现在,我想要实现的是将所有权转移到我的类中的这个
std::unique_ptr
,这样,如果所有
共享的_ptr
都将被销毁,那么只要这个
unique_ptr
保持活动状态,我的对象就会保持活动状态


我的问题是-是否有可能将所有权从
std::shared\u ptr
转移到
std::unique\u ptr
,如果是,我该怎么做?

从逻辑上讲,这种情况对我来说没有意义

假设有一段时间可以转让所有权,但只有当您确定只有一个
共享的\u ptr
生命时,您才能这样做;如果是这种情况,那么您仍然可以使用
shared\u ptr
作为
A
的成员,并假装它是
唯一的\u ptr

然后你评论道:

没错,我可以在一个类中创建
shared\u ptr
。我想我又误解了一个概念。我想这样做:如果
unique\u ptr
死亡,对象本身也会死亡,即使
shared\u ptr
s仍然指向它,但这很愚蠢,因为他们不知道对象本身已被破坏,因此不会是
nullptr
s


在这种情况下,您看到的是错误的智能指针。你可能需要的是打电话。如果是这样的话,那么请确保将其中一个和所有其他的用作
std::weak_ptr

,从逻辑上讲,这样的场景对我来说没有意义。假设有一段时间可以转移onwership,但只有当您确定只有一个
共享\u ptr
活动时,您才能这样做;如果是这种情况,那么您仍然可以使用
shared_ptr
作为
A
的成员,并假装它是
unique_ptr
“将所有权移动到我的类中的这个std::unique_ptr,这样,如果所有共享_ptr都将被销毁,那么只要这个unique_ptr保持活动,我的对象就会保持活动…”为什么不在一个对象中多共享一个呢?如果有N个其他共享的PTR指向同一个对象呢?你怎么可能处理这个
shared_ptr
没有提供
release
方法是有原因的。也许你想要的是a中的shared_ptr和所有其他弱_ptr???@蚊子:在这种情况下,你看到的是错误的智能指针。您可能需要的是
std::weak_ptr
。如果是这样的话,那么请确保使用一个
std::shared_ptr
和所有其他的
std::weak_ptr
。事实上,这个场景对我来说是合理的,因为我的代码使用
unique_ptr
(有充分的理由),但我必须从一个不能处理不可复制类型的库中获取数据。当然,我想修复lib,但是上游和部署需要时间,所以您就有了它。