Rumah >pembangunan bahagian belakang >C++ >Bagaimana untuk Mengatasi Operator `baru` dan `memadamkan` Global secara Universal dalam Pangkalan Kod Besar?

Bagaimana untuk Mengatasi Operator `baru` dan `memadamkan` Global secara Universal dalam Pangkalan Kod Besar?

Barbara Streisand
Barbara Streisandasal
2024-11-03 13:08:02703semak imbas

How to Universally Override Global `new` and `delete` Operators in Large Codebases?

Mengatasi Baharu Global & Padam Operator Dengan Berkesan

Masalah:

Menggantikan yang baharu dan global padam operator untuk menggunakan pengurusan memori tersuai memberikan cabaran dalam pangkalan kod berskala besar. Memasukkan fail pengepala yang mengandungi lebihan dalam setiap fail adalah tidak praktikal. Bagaimanakah seseorang boleh memastikan penggunaan universal lebihan beban ini?

Penyelesaian:

Mengatasi pengendali baharu dan padam ialah proses yang dilakukan pada masa pautan. Dengan mencipta unit terjemahan (TU) berasingan yang mentakrifkan pengendali dan memautkannya ke dalam projek, seseorang boleh menggantikan pengendali lalai secara global tanpa mengubah suai pangkalan kod sedia ada.

Sampel Kod:

Berikut ialah contoh TU yang mentakrifkan operator baharu dan padam:

<code class="cpp">// optional_ops.cpp

void * operator new(std::size_t n) throw(std::bad_alloc)
{
  //...
}

void operator delete(void * p) throw()
{
  //...
}</code>

Termasuk pengepala tidak diperlukan kerana pengisytiharan untuk operator baru dan operator padam dikodkan keras ke dalam bahasa. Walau bagaimanapun, nama seperti std, std::bad_alloc dan std::size_t mungkin perlu diisytiharkan.

Alternatif untuk C 11 dan Kemudian:

C 11 memperkenalkan cara yang lebih mudah untuk mentakrifkan lebihan baharu, menggunakan decltype(sizeof(0)) untuk menentukan jenis parameter saiz:

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

Atas ialah kandungan terperinci Bagaimana untuk Mengatasi Operator `baru` dan `memadamkan` Global secara Universal dalam Pangkalan Kod Besar?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn