首頁  >  文章  >  後端開發  >  如何覆蓋 C 中的全域“new”和“delete”運算符?

如何覆蓋 C 中的全域“new”和“delete”運算符?

Barbara Streisand
Barbara Streisand原創
2024-10-30 03:12:03848瀏覽

How Can I Override the Global `new` and `delete` Operators in C  ?

重寫全域運算子:取代new 和delete

在複雜的程式碼庫中,確保自訂new 和delete 運算子的一致使用可能具有挑戰性。一個問題是外部函式庫和 STL 使用可能會繞過自訂記憶體管理。

可以實現全域替換,而不是在多個檔案中包含重載。連結定義這些運算子的單獨翻譯單元 (TU)。此TU提供以下功能:

<code class="cpp">void * operator new(std::size_t n) throw(std::bad_alloc);
void operator delete(void * p) throw();</code>

包括或類似的標頭可能需要解析標準庫名稱。在 C 11 及更高版本中,decltype(sizeof(0)) 可以取代 std::size_t 並且可以省略動態例外規範。

<code class="cpp">void * operator new(decltype(sizeof(0)) n) noexcept(false);</code>

透過連結此 TU,自訂 new 和 delete 運算子在整個過程中都處於活動狀態該程序,確保一致的使用和改進的診斷能力。

以上是如何覆蓋 C 中的全域“new”和“delete”運算符?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn