Heim > Backend-Entwicklung > C++ > Hauptteil

Wie kann man globale „New'- und „Delete'-Operatoren in großen Codebasen universell überschreiben?

Barbara Streisand
Freigeben: 2024-11-03 13:08:02
Original
660 Leute haben es durchsucht

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

Globale Neu- und Löschoperatoren effektiv überschreiben

Problem:

Ersetzen der globalen Neu- und Löschoperatoren Löschoperatoren zur Verwendung einer benutzerdefinierten Speicherverwaltung stellen in großen Codebasen eine Herausforderung dar. Das Einfügen der Header-Datei mit den Überladungen in jede Datei ist unpraktisch. Wie kann man die universelle Übernahme dieser Überladungen sicherstellen?

Lösung:

Das Überschreiben von Neu- und Löschoperatoren ist ein Vorgang, der zum Zeitpunkt der Verknüpfung durchgeführt wird. Durch die Erstellung einer separaten Übersetzungseinheit (TU), die die Operatoren definiert, und deren Verknüpfung mit dem Projekt können die Standardoperatoren global ersetzt werden, ohne die vorhandene Codebasis zu ändern.

Codebeispiel:

Hier ist ein Beispiel für eine TU, die die neuen und Löschoperatoren definiert:

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

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

void operator delete(void * p) throw()
{
  //...
}</code>
Nach dem Login kopieren

Einschließlich des Der Header ist nicht erforderlich, da die Deklarationen für den Operator new und den Operator delete in der Sprache fest codiert sind. Namen wie std, std::bad_alloc und std::size_t müssen jedoch möglicherweise deklariert werden.

Alternative für C 11 und höher:

C 11 führt eine einfachere Möglichkeit zum Definieren der neuen Überladung ein, indem decltype(sizeof(0)) verwendet wird, um den Typ der Größe zu bestimmen Parameter:

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

Das obige ist der detaillierte Inhalt vonWie kann man globale „New'- und „Delete'-Operatoren in großen Codebasen universell überschreiben?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage