簡體   English   中英

我什么時候需要釋放記憶?

[英]When do I have to free memory?

我學習了C#,現在我正在學習C ++。 釋放記憶的全部意義對我來說都是新的,我想知道什么時候我需要擔心釋放內存以及什么時候不需要。

根據我的理解,我唯一擔心內存釋放的情況是,當我使用new運算符時,所以我應該使用delete釋放內存。
但在這些情況下,沒有必要釋放內存:

  • 類變量(成員)或靜態變量。
  • 函數中的局部變量。
  • STL系列(字符串,列表,矢量等)。

這是真的?
還有其他情況我不得不擔心釋放內存嗎?

你基本上做對了:你需要平衡newdeletenew[]delete[]mallocfree

編寫良好的C ++幾乎不包含任何內容,因為您將動態內存和生命周期管理的責任留給了合適的容器或管理器類,最明顯的是std::vectorstd::unique_ptr

作為一般經驗法則,我傾向於遵守以下規則:

  • 如果我編碼new/new[]我馬上編碼相應的delete/delete[]
  • 同樣,任何malloc/calloc都會立即跟隨相關的free

這避免了許多令人討厭的情況,您可以在其中生成內存泄漏。 如果你是C ++的新手我不會習慣malloc及其許多變種,它需要大量的腳手架才能保持類型安全,除非真正必要,否則可以算作壞事 ,但是,如上所述,有時候有必要:例如,當必須使用基於C的庫/ API時,您可能需要使用它們。

在主要的住宿很清楚他們,你的生活將更容易。

注意:我提到了上面的幾點,因為從C到C ++我不得不面對很多來自C的舊的經過測試和測試的技術,這會導致C ++出現問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM