2010-09-29 30 views
3

我有一個關於shared_ptrs和C++所有權的問題:C++:Circularity和shared_ptr

我有一堆在堆上創建的對象。每一個都有一個容器,它容納指向這些對象的指針,有時甚至是指向容器所屬的同一對象的指針。因爲我在這種情況下閱讀了使用shared_ptr的風險(循環),所以我正在考慮如何做到最好。 幸運的是,有一個類包含所有有問題的對象(但不是它本身),所以我認爲我把它放在它們的所有權上,這樣當有問題的對象保存原始指針時,它的容器就擁有shared_ptrs。也就是說,類的銷燬釋放了堆分配的內存。這(也是在設計方面)是一個很好的決定嗎?

另一個不是讓對象保持指針,而是唯一的ID。這意味着通過ID實際獲得對象的查找,但是,我認爲這也會減少對象間的關鍵依賴關係。這是可取的嗎?

問候,

耶拿

回答

3

你可能想查找升壓weak_ptr

+0

感謝您的參考,這看起來很有希望! – jena 2010-09-29 21:11:26

+0

@downvoter:你能解釋downvote的原因,以便給我們一個改善的機會嗎? – 2012-07-22 16:31:30

2

這是一個主觀答案,所以..。

大多數情況下,當您真正瞭解對象的生命週期並控制其依賴關係時,可以使用您陳述的方法。當生命週期不成問題時,只使用指針是沒有問題的。

使用ids只是爲指針值添加一個新的'id',因此在使用這些對象時會添加'無用'間接。

缺點是,你不能(或不應該)將對象的引用交給其他代碼,這可能會延長對象的生命週期。

當您的集合中的某些部分可以將其引用對象的生命週期延長到更長的時間時,則使用boost :: weak_ptr。

+0

我想我同意一個唯一的ID會有點多餘。我會看看boost :: weak_ptr,看看它是否適合我的問題。 – jena 2010-09-29 21:14:01