我可以获得指针所属的unique_ptr(如果有的话)吗?
Can I get the unique_ptr (if any) that the pointer belong to?
我正在构建一棵树,其中节点 class 在左右子节点上具有 unique_ptr 并且节点* 指针指向父节点。当我删除节点时,我获取节点并且我必须检查我要删除的节点是否在左子节点的右侧,然后重置父节点中的 unique_ptr 。有什么方法可以获取指针并询问它周围是否有任何 unique_ptr 包装器并且可能 return 它?
Is there any way to take the pointer and ask if there is any unique_ptr wrapper around it and possibly return it?
没有查找 unique_ptr
的通用方法,但您可以存储参考。
假设你的树是二叉树,你可以像这样在 parent 中找到 unique_ptr
:
(parent->left == this ? parent->left : parent->right).release();
如果树不是二叉树,您可以遍历所有子树。
在C++中,指针是单向的; unique_ptr
只是一个指针的包装器 class,不会改变这一点。无法从它指向的原始指针中获取 unique_ptr
。
针对您的特定问题可能有一些替代解决方案:
- 添加指向子对象的 parent 指针,然后您可以导航到父对象以从那里删除子对象。如果您有很多节点,这可能效率低下。
- 实施迭代器的概念 - 上下文的抽象,它携带足够的信息以便能够修改树(例如删除节点)。例如,树迭代器可以包含指向当前节点的指针、指向其父节点的指针以及指示它是左节点还是右节点的标志。缺点是你不能简单地通过指向它的节点的指针来修改树,你需要有一个迭代器的实例。
我正在构建一棵树,其中节点 class 在左右子节点上具有 unique_ptr 并且节点* 指针指向父节点。当我删除节点时,我获取节点并且我必须检查我要删除的节点是否在左子节点的右侧,然后重置父节点中的 unique_ptr 。有什么方法可以获取指针并询问它周围是否有任何 unique_ptr 包装器并且可能 return 它?
Is there any way to take the pointer and ask if there is any unique_ptr wrapper around it and possibly return it?
没有查找 unique_ptr
的通用方法,但您可以存储参考。
假设你的树是二叉树,你可以像这样在 parent 中找到 unique_ptr
:
(parent->left == this ? parent->left : parent->right).release();
如果树不是二叉树,您可以遍历所有子树。
在C++中,指针是单向的; unique_ptr
只是一个指针的包装器 class,不会改变这一点。无法从它指向的原始指针中获取 unique_ptr
。
针对您的特定问题可能有一些替代解决方案:
- 添加指向子对象的 parent 指针,然后您可以导航到父对象以从那里删除子对象。如果您有很多节点,这可能效率低下。
- 实施迭代器的概念 - 上下文的抽象,它携带足够的信息以便能够修改树(例如删除节点)。例如,树迭代器可以包含指向当前节点的指针、指向其父节点的指针以及指示它是左节点还是右节点的标志。缺点是你不能简单地通过指向它的节点的指针来修改树,你需要有一个迭代器的实例。