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

时间:2017-12-18 19:26:57

标签: c++ pointers this unique-ptr

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

2 个答案:

答案 0 :(得分:5)

  

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

找不到unique_ptr 的通用方式,但您可以存储参考。

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

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

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

答案 1 :(得分:0)

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

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

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