二进制树的智能指针

Smart Pointers for Binary Tree

本文关键字:指针 智能 二进制      更新时间:2023-10-16

如果我有一个二进制树,其中每个节点只包含指向子节点的指针,那么unique_ptr工作得很好。如果我希望每个节点都有一个父指针,那么情况就不那么好了,因为一个节点可能有三个指向它的指针:带父指针的二进制树

在这种情况下我能做什么?我可以用shared_ptr做任何事情,但有人告诉我,这不是一个好的设计,因为我可能会有循环。如果我要使用weak_ptr作为父指针,我应该从哪个shared_ptr创建这个weak_ptr

哪种类型的指针最适合二叉树?

如果我有一个二进制树,其中每个节点只包含指向则unique_ptr工作得非常好。

右。

如果我希望每个节点都有一个父指针,那么情况是不太好,因为一个节点可能有三个指针指向它

您应该区分拥有指针的和观察

拥有原始拥有指针是个坏主意,也是错误和泄漏的来源;另一方面,在许多情况下,让raw观察指针是可以的(只要观察到的对象仍然"活动")。

在您的情况下,您可能需要考虑这样一种设计,即每个节点都包含unique_ptr到子节点,因为这些是拥有的指针,在这种情况下,使用像unique_ptr这样的智能拥有指针效果很好。

另一方面,子节点可以使用非拥有指针引用其父节点(子节点"不拥有">其父节点,子节点只是观察父节点),原始指示器与非拥有观测的指针一样工作。

顺便说一句,当/如果您使用shared_ptr时,您必须注意循环,就好像您没有正确地破坏它们一样,那么您就有泄漏(未发布的对象)。另一方面,父母通过拥有unique_ptrs指向孩子,孩子通过原始观察指针观察父母,对我来说似乎是一个更简单的设计