簡體   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