17

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

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

在代码的某个地方,我使用了几个std::shared_ptr指向同一个对象的 s。现在我想要实现的是std::unique_ptr在我的类中将所有权转移到 this 上,这样如果所有shared_ptr的 s 都将被销毁,那么只要 this 还活着,我的对象就会unique_ptr一直活着。

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

4

1 回答 1

15

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

假设有一段时间可以转移所有权,但只有在确定只有一个 shared_ptr活着的时候才能这样做;如果是这种情况,那么您仍然可以使用shared_ptras member ofA假装它是unique_ptr.

然后你评论说:

没错,我可以shared_ptr在 A 类中创建。我想我又误解了一个概念。我想以这种方式表现它:如果unique_ptr死了,对象本身也死了,即使shared_ptrs 仍然指向它,但这很愚蠢,因为他们不知道对象本身已被销毁,因此它们不会是nullptrs。

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

于 2013-03-11T12:08:34.313 回答