0
可以將weak_ptr和shared_ptr一起使用。但我想知道是否可以創建一個shared_ptr和unique_pointer引用同一個對象。如果是,那麼必須遵循哪條規則?不同的智能指針可以指向同一個對象嗎?
可以將weak_ptr和shared_ptr一起使用。但我想知道是否可以創建一個shared_ptr和unique_pointer引用同一個對象。如果是,那麼必須遵循哪條規則?不同的智能指針可以指向同一個對象嗎?
如果您創建一個unique_ptr
和一個shared_ptr
到同一個對象,他們將不知道彼此。因此,最終會出現「雙重釋放」錯誤,更不要說當另一個指針已被釋放時,您可能會無意中取消引用一個指針。
總之,不要這樣做。如果您需要將所有權從unique_ptr轉移到shared_ptr或反之,則在創建「新」指針時,請在「舊」指針上調用release()
。
對於您關於「將遵循哪條規則」的問題,答案是兩者。每個智能指針都會遵循自己的規則,但整個系統的行爲將是錯誤的。就像您在自己調用delete
之前或之後從原始指針創建單個智能指針一樣。
請注意,相同的建議適用於創建兩個unique_ptr
s或兩個shared_ptr
s到同一個原始指針。事實上,混合智能指針的類型並不真正相關。
它可以,但那麼它會很糟糕..然後沒有任何使用智能指針的要點。 – Nawaz
超過* *唯一指針引用對象的想法與名稱前綴有些不直觀:* unique *。你爲什麼想這樣做? – WhozCraig
我們剛剛學習,問題出現在我們的腦海中,我們沒有找到答案:) –