2014-12-27 37 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到同一個原始指針。事實上,混合智能指針的類型並不真正相關。

相關問題