Sovraccarico dell'operatore globale nuovo / elimina in C ++
-
11-07-2019 - |
Domanda
Sto provando a sovraccaricare l'operatore globale nuovo ed eliminare per un'applicazione sensibile alle prestazioni. Ho letto le preoccupazioni descritte in http://www.informit.com /articles/article.aspx?p=30642&seqNum=3 e le raccomandazioni per utilizzare l'allocatore di Intel TBB http://www.intel.com/technology/itj/2007/v11i4/5-foundations/5-memory.htm
Poiché sto sovraccaricando il nuovo ed elimino per la prima volta, ho alcune domande.
Dovrei includere la mia nuova intestazione Allocator.h (o Pre.h) contenente la nuova funzione sovraccaricata in tutti i file che contengono " new " le chiamate? Questo è noioso.
O dovrei usare " gcc -include Allocator.h ... " che include Allocator.h (prima) in ogni unità di traduzione? Voglio mantenere la piattaforma di codice il più indipendente possibile. Tutti i compilatori supportano qualcosa di analogo a " gcc -include " ;?
Soluzione
Se vuoi sovraccaricare l'operatore globale nuovo
e operatore elimina
, devi solo implementarlo. Non è necessario definirlo esplicitamente ovunque poiché è già definito come parte del linguaggio.
Modifica: se si desidera definire un nuovo operatore che accetta parametri diversi, è necessario # includerlo ovunque. Comunque lo fai dipende da te; è principalmente una questione di stile.
E non dimenticare di implementare tutte le varianti dell'operatore globale new ed eliminare: new
, new []
, delete
, < code> delete [] e le varianti std :: nothrow
.
Altri suggerimenti
Se si utilizza Visual Studio e si utilizzano intestazioni precompilate, è possibile inserire l'inclusione. Penso che gcc abbia anche una qualche forma di intestazioni precompilate, che migliorerebbe anche i tempi di compilazione.