2010-10-12 89 views
0

IM在這個項目上工作,C++的shared_ptr如何刪除指針對象有多個shared_ptr的

的具有1M的問題是一個對象,並沒有真正被刪除,當我需要它是因爲它有一對夫婦指向它的共享指針。

我該如何解決這個問題,請大家幫忙。

+1

這聽起來像是你有設計問題。如果您需要在多個shared_ptr中刪除它,則無法工作。 你會破壞代碼。 你應該更具體什麼你想要實現 – Vinzenz 2010-10-12 16:24:57

+1

這沒有任何意義。如果它是共享的,一個擁有者不能只是決定把它拿走。這不是分享。 – GManNickG 2010-10-12 16:34:24

+2

@GMan:這是小學時尚風格的「我正在把我的東西帶回家」分享。 :-) – 2010-10-12 16:35:57

回答

9

這是設計。只要一個對象擁有一個或多個智能指針,它就不會被銷燬。該對象的所有權是共享所有擁有所有權的智能指針,並且該對象不能被銷燬,直到所有的所有者完成它。這是共享所有權。

如果你希望能夠摧毀目標,而仍然有它一定的參考,您可以使用weak_ptr那些引用。

+0

+1聽起來像那些懸掛裁判應該通過weak_ptr好的 – 2010-10-12 17:12:05

0

您可以通過使用其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仍然持有指向對象的指針,並檢查它們是否不應該再持有對象。

+3

如果它被其他'shared_ptr'實例共享,則不會刪除該對象。 – sbi 2010-10-12 16:57:31

+0

你說得對,剛剛研究過這個,看到我錯了。我會編輯這個。 – MOnsDaR 2010-10-12 17:32:46

相關問題