最近,我經常遇到需要與此數據結構類似的情況。智能指針/編碼模式的名稱
限制:C++ 03標準。
+-----+--------------+ +----+
|node0| NodeDataRef ->-------------->|data|
+-----+--------------+ +----+
+-----+--------------+ ^^^
|node1| NodeDataRef ->----------------+| |
+-----+--------------+ | |
+-----+--------------+ | |
|node2| NodeDataRef ->-----------------+ |
+-----+--------------+ |
|
+-----+--------------+ |
|root | RootDataRef ->-------------------+
+-----+--------------+
- 有幾個
Node
類,其中每個Node
持有NodeDataRef
「參考」(認爲shared_ptr
)爲 「Data
」(類,結構,不管是誰 - 動態分配)的同一個實例。 - 還有一個「
Root
」或「主」節點/類,它將RootDataRef
引用(此時,認爲是weak_ptr
)保存爲相同的「Data
」。 - 當全部
Node
被銷燬時,data
也被銷燬,並且RootDataRef
被設置爲0
/NULL
。即NodeDataRef
行爲像shared_ptr<Data>
和RootDataRef
行爲像weak_ptr<Data>
- 然而根節點可以強制的數據的毀壞,即使仍有活性
NodeDataRef
秒。在這種情況下,所有指向數據的NodeDataRef
都設置爲NULL
/0
,而RootDataRef
也設置爲0
/NULL
。
即, weak_ptr<Data>
可以強制銷燬所有鏈接的shared_ptr<Data>
。
- 此模式/智能指針類型是否有名稱?
- 我該如何快速使用Boost或Qt 4來實現? (「快」是指未經寫一個類來維持引用列表)
我問了一個「快速」解決方案,因爲我知道如何自己編寫這個文件,但是認爲可能有某種類型的文件(我已經可以使用的available_class) – SigTerm 2013-03-24 16:55:29
@SigTerm:好的,我不知道的任何「最佳實踐」來實現這種設計模式,我只想指出,無論選擇哪種解決方案,我都希望在代碼中清晰可見,而不是將其包裝在一些定製所有權策略中。 – 2013-03-24 16:58:51