Überlastung des globalen Operators New/Löschen in C ++
-
11-07-2019 - |
Frage
Ich versuche, den globalen Betreiber neu zu überladen und für eine leistungssensible Anwendung zu löschen. Ich habe die Bedenken gelesen, die beschrieben wurden http://www.informit.com/articles/article.aspx?p=30642&seqnum=3 und die Empfehlungen zur Verwendung von Intel TBBs Allocator http://www.intel.com/technology/itj/2007/v11i4/5-Foundations/5-memory.htm
Da ich zum ersten Mal neu überlaste und zum ersten Mal lösche, habe ich ein paar Fragen.
Sollte ich meinen neuen Header -Allocator (oder Pre.h) einschließen, der die überladene neue Funktion in allen Dateien enthält, die "neue" Anrufe enthalten? Das ist mühsam.
Oder sollte ich "GCC -Include Allocator.H ..." verwenden, der Allocator.h (vor) in jede Übersetzungseinheit enthält? Ich möchte die Codeplattform so weit wie möglich unabhängig halten. Unterstützen alle Compiler etwas Analoges zu "GCC -include"?
Lösung
Wenn Sie die globale überladen möchten operator new
und operator delete
, Sie müssen es nur implementieren. Sie müssen es nicht explizit überall definieren, da es bereits als Teil der Sprache definiert ist.
Bearbeiten: Wenn Sie einen Operator neu definieren möchten, der unterschiedliche Parameter erfordert, müssen Sie es überall #Include. Wie auch immer Sie das tun, liegt bei Ihnen; Es ist meistens eine Frage des Stils.
Und vergessen Sie nicht, alle Varianten des globalen Betreibers neu zu implementieren und zu löschen: new
, new[]
, delete
, delete[]
, und die std::nothrow
Varianten.
Andere Tipps
Wenn Sie Visual Studio verwenden und vorkompilierte Header verwenden, können Sie das inklusive dort einwerfen. Ich denke, GCC hat auch irgendeine Form von Vorkompeten -Headern, die auch Ihre Zusammenstellungszeiten verbessern würden.