我可以获得指针所属的unique_ptr(如果有)吗?

问题描述 投票:0回答:2

我正在构建一个Node类,其中左侧和右侧子节点具有unique_ptr,父节点具有Node *指针。当我删除节点时,我接受节点,我必须检查我正在删除的节点是否是左子节点,然后重置父节点中的unique_ptr。有没有办法获取指针,并询问是否有任何unique_ptr包装,并可能返回它?

c++ pointers this unique-ptr
2个回答
5
投票

有没有办法获取指针,并询问是否有任何unique_ptr包装,并可能返回它?

没有找到unique_ptr的通用方法,但您可以存储引用。

假设你的树是二进制的,你可以在父母中找到unique_ptr,如下所示:

(parent->left == this ? parent->left : parent->right).release();

如果树不是二进制,则可以遍历所有子项。


0
投票

在C ++中,指针是单向的;和unique_ptr,只是一个指针周围的包装类,并没有改变它。没有办法从它指向的原始指针获取unique_ptr

可以为您的特定问题提供一些替代解决方案:

  1. 添加父对象到子对象,然后您可以导航到父对象从那里删除子对象。如果您有大量节点,这可能效率低下。
  2. 实现迭代器的概念 - 一个上下文的抽象,它带有足够的信息以便能够修改树(例如删除一个节点)。例如,树迭代器可以包含指向当前节点的指针,指向其父节点的指针以及指示它是左子节点还是右子节点的标志。缺点是你不能简单地通过指向它的节点来修改树,你需要有一个迭代器的实例。
© www.soinside.com 2019 - 2024. All rights reserved.