C++ 如何释放内存

c++ how to free memory

本文关键字:释放 内存 何释放 C++      更新时间:2023-10-16

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

将要构建的树非常大(最多 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是一个智能指针类。智能指针在超出范围时会自动销毁基础对象。这使您不必自己调用删除。

这种类型的代码不仅更容易编写,因为您不必记住自己调用 delete,而且这是编写在引发异常时不会泄漏内存的代码的唯一方法

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


而且,除非您正在学习二叉搜索树,否则您应该使用std::set类而不是构建自己的类。std::set实现为二叉搜索树(通常为红黑树,它是二叉搜索树的变体(。

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