如果我有一個二叉樹,其中每個節點只包含指向子節點的指針,那麼unique_ptr
工作得很好。如果我希望每個節點都有一個父指針,那麼情況並不好,因爲一個節點可能有三個指針指向它:Binary Tree with parent pointer二叉樹智能指針
在這種情況下我能做些什麼?我可以使用shared_ptr
來處理所有事情,但我被告知這不是一個好的設計,因爲我可能會得到週期。如果我使用weak_ptr
作爲父指針,那麼shared_ptr
是否會創建這個weak_ptr
?
我開始認爲普通的內置指針可能更適合這個問題。任何意見是極大的讚賞。
一對'std :: unique_ptr'和一個**非擁有**原始指針指向父對象沒有任何問題。 – StoryTeller
大多數情況下,您不應該看到智能指針是簡單的自我刪除指針,而是作爲所有權原語。一個「資源」可以只有一個所有者(使用'std :: unique_ptr')還是多個併發所有者(使用'std :: shared_ptr')? –
也許我一個人在這裏,但在btree實現中使用智能指針的想法並不是最好的。我看到在你有控制權的具體類中使用原始指針沒有問題。另外,「作爲所有者」的概念並不容易(因爲有更多的一個「直覺」觀點)與一棵樹相連。如果你想稍後對它進行一些圖表操作,它可能會變得一團糟。 –