Heim  >  Artikel  >  Backend-Entwicklung  >  Wie kann man globale „New“- und „Delete“-Operatoren in großen Codebasen universell überschreiben?

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

Barbara Streisand
Barbara StreisandOriginal
2024-11-03 13:08:02660Durchsuche

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>

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>

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!

Stellungnahme:
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