2014-12-27 36 views
0

可以将weak_ptr和shared_ptr一起使用。但我想知道是否可以创建一个shared_ptr和unique_pointer引用同一个对象。如果是,那么必须遵循哪条规则?不同的智能指针可以指向同一个对象吗?

+0

它可以,但那么它会很糟糕..然后没有任何使用智能指针的要点。 – Nawaz

+1

超过* *唯一指针引用对象的想法与名称前缀有些不直观:* unique *。你为什么想这样做? – WhozCraig

+1

我们刚刚学习,问题出现在我们的脑海中,我们没有找到答案:) –

回答

3

如果您创建一个unique_ptr和一个shared_ptr到同一个对象,他们将不知道彼此。因此,最终会出现“双重释放”错误,更不要说当另一个指针已被释放时,您可能会无意中取消引用一个指针。

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

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

请注意,相同的建议适用于创建两个unique_ptr s或两个shared_ptr s到同一个原始指针。事实上,混合智能指针的类型并不真正相关。

相关问题