iT邦幫忙

2025 iThome 鐵人賽

DAY 24
2
Software Development

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

[Day 24] Customizing new and delete II

  • 分享至 

  • xImage
  •  

Yoyo 期待已久的公司團旅第二天!雖然是充實且收穫滿滿的旅行,但路途遙遠好晚才回到家。吃完美味的雞蛋糕,繼續本日的閱讀筆記。

51. Adhere to convention when writing new and delete

在撰寫自訂的 newdelete 時,務必遵守 C++ 標準所定義的行為規範。這不僅關係到程式的可預期性,也影響到與標準庫或第三方程式碼的相容性。

定義 new 功能時需要滿足以下條件:

  • 包含一個無窮迴圈,用於反覆嘗試分配記憶體,特別是當有可用的 new-handler 時。
  • 在無法滿足記憶體需求時,應呼叫 new-handler
  • 處理請求分配 0 個 byte 的情況。

delete 則有以下要求:

  • 若接收到的指標為 null不做任何操作
  • 有能力處理比預期更大的記憶體。

自訂的 newdelete 都需要遵循這些行為約定,確保記憶體管理行為與標準一致,避免導致不必要的錯誤。

52. Write placement delete if you write placement new

當撰寫一個自定義的 new 替代版本,也就是指定記憶體分配位置時,也務必要記得提供對應delete,防止程式因 exception 導致記憶體未正確釋放。即使 new 並不實際分配記憶體,delete 仍然需要存在以避免建構子可能的失敗情形。

此外需確認不會意外隱藏掉預設的全域 newdelete 函式,以免遮蔽其他部份的記憶體分配流程,並能以此確保程式行為一致性。可以透過 using ::operator new; 等語句引入標準版本,避免潛在錯誤。


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

尚未有邦友留言

立即登入留言