【发布时间】:2017-10-18 07:19:00
【问题描述】:
如果我有一个二叉树,其中每个节点只包含指向子节点的指针,那么unique_ptr 工作得很好。如果我希望每个节点都有一个父指针,那么情况就不太好了,因为一个节点可能有三个指针指向它:Binary Tree with parent pointer
在这种情况下我能做什么?我可以使用shared_ptr 来处理所有事情,但有人告诉我这不是一个好的设计,因为我可能会遇到周期问题。如果我要使用weak_ptr 作为父指针,我应该从哪个shared_ptr 创建这个weak_ptr?
哪种类型的指针适合二叉树?
【问题讨论】:
-
一对
std::unique_ptr和一个非拥有指向父级的原始指针没有任何问题。 -
大多数时候,您不应该将智能指针视为简单的自删除指针,而是将其视为所有权原语。 “资源”可以只有一个所有者(
std::unique_ptr)或多个同时所有者(std::shared_ptr)吗? -
也许我一个人在这里,但在 btree 实现中使用智能指针的整个想法并不是最好的。我认为在您可以控制的具体类中使用原始指针没有问题。此外,“成为所有者”的概念并不容易(恕我直言,不止一个“直觉”观点)与一棵树相关联。如果你以后想在它上面实现一些图形操作,它可能会变得一团糟。