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
Lepaskan: 2024-11-03 13:08:02
asal
702 orang telah melayarinya

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan