【发布时间】:2018-06-01 04:33:32
【问题描述】:
我正在构建一棵树,其中 Node 类在左右子节点上具有 unique_ptr,并且 Node* 指针指向父节点。当我删除节点时,我使用节点并且我必须检查我要删除的节点是否在左子节点的右边,然后重置父节点中的 unique_ptr。有什么方法可以获取指针并询问是否有任何 unique_ptr 包装器围绕它并可能返回它?
【问题讨论】:
-
您可以使用
std::/enable_shared_from_this获取一些std::shared_ptr。 -
我不太清楚你在问什么。如果删除树中的节点,则必须获取对其父节点的指针/引用,以便调整父节点的指针。这与唯一、原始和共享指针无关。通常当你实施例如RB 树,您将在每个节点中包含一个父指针 (stackoverflow.com/questions/46119328/…)。所以你可以这样做:
if (this->parent->left.get() == this) { // current node is left child } else { // is right }. -
@NirFriedman 如果我将节点作为 unique_ptr 引用进行操作,我只需要在节点上调用 reset,但现在我必须上一层并检查它是左子还是右子,即使我已经有我要删除的指针。我知道我必须调整父指针,但如果我能得到它,是否只需在 unique_ptr 参考上重置就可以解决?
-
@Davar 回答您的问题仍然有点困难,因为它过于宽泛且缺乏细节。您的问题的实际答案是,无论如何,您都需要一个父指针来处理二叉树实现中的各种事物(请阅读我的链接答案)。另一种可能性是您可以使您的
iterator类型包含指向相关节点的unique_ptr的指针,而不是直接指向该节点。无论哪种方式,您都需要访问父持有的指针,并且没有神奇的方法可以做到这一点。请注意,弗朗索瓦关于 enable_shared_from_this 的建议也对您没有帮助。 -
@NirFriedman 是的,你是对的。
标签: c++ pointers this unique-ptr