繁体   English   中英

c++ 如何释放 memory

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM