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 " ;?

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top