二进制树的智能指针
Smart Pointers for Binary Tree
如果我有一个二进制树,其中每个节点只包含指向子节点的指针,那么unique_ptr
工作得很好。如果我希望每个节点都有一个父指针,那么情况就不那么好了,因为一个节点可能有三个指向它的指针:带父指针的二进制树
在这种情况下我能做什么?我可以用shared_ptr
做任何事情,但有人告诉我,这不是一个好的设计,因为我可能会有循环。如果我要使用weak_ptr
作为父指针,我应该从哪个shared_ptr
创建这个weak_ptr
?
哪种类型的指针最适合二叉树?
如果我有一个二进制树,其中每个节点只包含指向则
unique_ptr
工作得非常好。
右。
如果我希望每个节点都有一个父指针,那么情况是不太好,因为一个节点可能有三个指针指向它
您应该区分拥有指针的和观察的。
拥有原始拥有指针是个坏主意,也是错误和泄漏的来源;另一方面,在许多情况下,让raw观察指针是可以的(只要观察到的对象仍然"活动")。
在您的情况下,您可能需要考虑这样一种设计,即每个节点都包含unique_ptr
到子节点,因为这些是拥有的指针,在这种情况下,使用像unique_ptr
这样的智能拥有指针效果很好。
另一方面,子节点可以使用非拥有指针引用其父节点(子节点"不拥有">其父节点,子节点只是观察父节点),原始指示器与非拥有观测的指针一样工作。
顺便说一句,当/如果您使用shared_ptr
时,您必须注意循环,就好像您没有正确地破坏它们一样,那么您就有泄漏(未发布的对象)。另一方面,父母通过拥有unique_ptr
s指向孩子,孩子通过原始观察指针观察父母,对我来说似乎是一个更简单的设计
相关文章:
- 1d 智能指针不适用于语法 (*)++
- 优先顺序:智能指针和类析构函数
- 对于C++中使用智能指针的指针算术限制,有没有一种变通方法
- 智能指针作为无序映射键,并通过引用进行比较
- 智能指针概念所有权和寿命
- 正在理解智能指针,但出现错误:未分配正在释放的指针
- 尝试使用智能指针时引发异常
- 我可以制作指向智能指针的智能指针吗?
- 通过智能指针和转换对基本模板参数进行模板推导
- OpenCV 我应该使用智能指针来防止内存泄漏吗?
- 从堆栈分配的原始指针构造智能指针
- 初始化指向类实例的智能指针并访问其方法
- 如何使用 std::make_shared 创建基类类型的智能指针?
- 给定一个指向堆分配内存的指针,智能指针实现如何为其找到合适的释放函数?
- 编译器不会使用 -std=c++11 编译智能指针
- 具有智能指针的多态性
- C++:矢量分配器行为、内存分配和智能指针
- 通过简单的包装指针C++智能指针性能和差异
- 矢量中的自动指针(智能)
- Std::vector的对象/指针/智能指针传递对象(总线错误:10)