C ++如何释放内存

c++ how to free memory

我有以下问题: 我使用名为 Node.js 的 class 创建了一个数据结构来表示二叉搜索树。每个节点都通过指向左 child 和右 child.

的指针连接

将要构建的树非常大(最多 100 万个节点),因此我需要一种方法在每次构建树后释放内存。

树由指向根节点的指针表示:

BST_Node *bst = new BST_Node(...);

我试过 delete bst 和创建 destructor ~BST_Node(){delete left; delete right;} 但它们都没有解决问题。 内存使用率达到 99% (8GB) 然后我必须终止进程以避免 PC 重启。

我该如何解决?谢谢

在 C++ 中,此代码:

BST_Node *bst = new BST_Node(...);

应该写成:

auto bst = std::make_unique<BST_Node>(...);

这将创建 bst 作为 unique_ptr<BST_Node> 对象。 unique_ptr 是一个 智能指针 class。智能指针在超出范围时会自动销毁底层对象。这使您不必自己调用 delete。

这种类型的代码不仅更容易编写,因为您不必记得自己调用 delete,而且 唯一 编写代码的方法不会如果抛出异常,则会泄漏内存。

BST_Node的成员变量应该使用相同的unique_ptr


而且,除非您正在学习 二叉搜索树,否则您应该使用 std::set class 而不是自己构建。 std::set实现为二叉搜索树(一般是红黑树,是二叉搜索树的变种)。

哈希映射也可能比二叉搜索树更有效。 C++ 中的哈希映射称为 std::unordered_map.