Heim > Artikel > Backend-Entwicklung > Wie kann man globale „New“- und „Delete“-Operatoren in großen Codebasen universell überschreiben?
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
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!