[英]c++ how to free memory
我有以下问题:我使用名为 Node.js 的 class 创建了一个数据结构来表示二叉搜索树。 每个节点通过指向左孩子和右孩子的指针连接。
将要构建的树非常大(最多 100 万个节点),所以我需要一种方法在每次树构建后释放 memory。
树由指向根节点的指针表示:
BST_Node *bst = new BST_Node(...);
我试过delete bst
并创建一个destructor
~BST_Node(){delete left; delete right;}
~BST_Node(){delete left; delete right;}
但它们都不能解决问题。 memory 使用率达到 99% (8GB) 然后我必须终止进程以避免 PC 重新启动。
我该如何解决? 谢谢
在 C++ 中,此代码:
BST_Node *bst = new BST_Node(...);
应该写成:
auto bst = std::make_unique<BST_Node>(...);
这会将bst
创建为unique_ptr<BST_Node>
object。 unique_ptr
是一个智能指针class。 智能指针会在 go 超出 scope 时自动销毁底层 object。 这使您不必自己调用删除。
这种类型的代码不仅更容易编写,因为您不必记得自己调用 delete,而且这是编写在抛出异常时不会泄漏 memory 的代码的唯一方法。
您应该对BST_Node
的成员变量使用相同的unique_ptr
。
而且,除非您正在学习二叉搜索树,否则您应该使用std::set
class 而不是自己构建。 std::set
实现为二叉搜索树(通常是红黑树,它是二叉搜索树的一种变体)。
hash map 也可能比二叉搜索树更有效。 C++ 中的 hash map 称为std::unordered_map
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.