我有一个班级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
,如果是,我该怎么办呢?
答案 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
。