不同的智能指针可以引用同一个对象吗?

时间:2014-12-27 07:09:01

标签: c++ c++11 smart-pointers

可以将weak_ptr与shared_ptr一起使用。但我想知道是否可以创建引用同一对象的shared_ptr和unique_pointer。如果是,必须遵循哪条规则?

1 个答案:

答案 0 :(得分:3)

如果您为同一个对象创建unique_ptrshared_ptr,他们就不会相互了解。因此,最终会出现“双重释放”错误,更不用说当另一个指针已被释放时,您可能会无意中取消引用一个指针。

简而言之,不要这样做。如果您需要将所有权从unique_ptr转移到shared_ptr,反之亦然,请在创建“新”指针时在“旧”指针上调用release()

关于“将遵循哪条规则”的问题,答案是两者。每个智能指针都遵循自己的规则,但整个系统行为将是错误的。就像在自己调用delete之前或之后从原始指针创建一个智能指针一样。

请注意,相同的建议适用于为同一原始指针创建两个unique_ptr或两个shared_ptr。你混合使用智能指针的事实并不是真正相关的。