iT邦幫忙

2025 iThome 鐵人賽

DAY 23
1
Software Development

30 天 Effective C++ 大挑戰!!系列 第 23

[Day 23] Customizing new and delete I

  • 分享至 

  • xImage
  •  

週末是 Yoyo 期待已久的公司團旅!但當初規劃的讀書進度依然要執行,於是這兩天就簡單講解觀念即可。

49. Understand the behavior of the new-handler

C++ 中,當 new 無法分配記憶體時,會拋出 std::bad_alloc 異常。不過在那之前會先呼叫稱為 new-handler 的函式。

new-handler 提供了優雅處理記憶體的機制,允許程式在需要時釋放更多記憶體,避免程式直接崩潰。其有以下幾個責任:

  • 釋放未使用的記憶體、壓縮資料,或將記憶體交換至磁碟上。
  • 安裝並設置另一個 new-handler,新的 handler 可能會採取更積極的策略。
  • 若仍無法釋放足夠的記憶體,丟出 std::bad_alloc 或其他適當異常。
  • 若無法復原,則執行 abort()exit() 終止程式。

std::set_new_handler 可設置全域的 handler,亦能通過為特定類別重載運算子 new 來實現類別專屬的 new-handler,針對該類型的記憶體分配提供更細緻的控制。而當記憶體分配失敗時,指定的 new-handler 便會被觸發執行。

50. Understand when it makes sense to replace new and delete

newdelete 可以針對特定需求提供靈活且高效的記憶體管理,從而提升程式的效能與可靠性。自定義的 newdelete 則為一些特定場景提供了優勢。

  • 提升效能:根據特定應用場景,實現自訂的記憶體分配策略來優化速度。
  • 偵錯記憶體使用錯誤:偵測記憶體洩漏、越界存取、重複釋放指標等問題。
  • 記錄堆管理資訊:收集記憶體分配的統計數據,用於分析程序的記憶體使用情況。

上一篇
[Day 22] 中場休息 Q&A小測驗!!
下一篇
[Day 24] Customizing new and delete II
系列文
30 天 Effective C++ 大挑戰!!30
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言