在考虑像二叉树这样的模板化数据结构时,处理指针类型最简洁的方法是什么?
如果树持有指针,则在删除子树时必须将指针指向的内存返回到堆中。但是我如何从 BinaryTree 类内部判断它是由 malloc 还是 new 分配的?
一种解决方案是设置标志,指示存储的数据类型。但是我的类(class)会依赖外部的正确用法...
另一个想法是将某种 vector 传递给所有可能删除子树的 BinaryTree 方法。每当删除子树时,它会将存储的数据添加到 vector 中,最后我可以从二叉树外部正确处理它们。
但这对我来说听起来像是一个麻烦的解决方案,可能有更好的方法。
最佳答案
将原始指针存储在像 BinaryTree 这样的容器中的唯一原因是您想要引用在其他地方存储/管理的对象。在那种情况下,简单地删除指针(而不是它们指向的对象)就足够了,因为对象的删除是在别处处理的。
如果你想在你的树中管理动态分配的对象,使用例如std::unique_pointer<T>
作为容器的元素类型。在这种情况下,再次简单地删除存储的元素就可以了,因为删除了 std::unique_pointer<T>
。意味着删除它指向的对象。
关于c++ - 如何处理模板类中的指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21549136/