IM在這個項目上工作,C++的shared_ptr如何刪除指針對象有多個shared_ptr的
的具有1M的問題是一個對象,並沒有真正被刪除,當我需要它是因爲它有一對夫婦指向它的共享指針。
我該如何解決這個問題,請大家幫忙。
IM在這個項目上工作,C++的shared_ptr如何刪除指針對象有多個shared_ptr的
的具有1M的問題是一個對象,並沒有真正被刪除,當我需要它是因爲它有一對夫婦指向它的共享指針。
我該如何解決這個問題,請大家幫忙。
這是設計。只要一個對象擁有一個或多個智能指針,它就不會被銷燬。該對象的所有權是共享所有擁有所有權的智能指針,並且該對象不能被銷燬,直到所有的所有者完成它。這是共享所有權。
如果你希望能夠摧毀目標,而仍然有它一定的參考,您可以使用weak_ptr
那些引用。
+1聽起來像那些懸掛裁判應該通過weak_ptr好的 – 2010-10-12 17:12:05
您可以通過使用其reset()
方法減小shared_ptr
的use_count。
如果你這樣做,每持有該實例的指針,最後reset()
會破壞它指向的對象。
shared_ptr<Class> myPointer1(new Class()); //myPointer holds an instance of Class
shared_ptr<Class> myPointer2 = myPointer1; //use_count == 2
myPointer1.reset(); //use_count == 1
myPointer2.reset(); //instance of class will be destroyed
但你可能有一個與你的問題設計,shared_ptr的應該自動熄滅焦點當某些對象被銷燬或方法結束。也許你應該看看shared_ptrs仍然持有指向對象的指針,並檢查它們是否不應該再持有對象。
這聽起來像是你有設計問題。如果您需要在多個shared_ptr中刪除它,則無法工作。 你會破壞代碼。 你應該更具體什麼你想要實現 – Vinzenz 2010-10-12 16:24:57
這沒有任何意義。如果它是共享的,一個擁有者不能只是決定把它拿走。這不是分享。 – GManNickG 2010-10-12 16:34:24
@GMan:這是小學時尚風格的「我正在把我的東西帶回家」分享。 :-) – 2010-10-12 16:35:57