Ottimizzare C++/Scrivere codice C++ efficiente: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
Nessun oggetto della modifica
Riga 298:
In altre parole, dichiara ''static'' tutte le funzioni membro che puoi.
 
In questo modo, non viene passato l’argomentol'argomento implicito ''this''.
 
=== Template di classi polimorfiche ===
Riga 306:
I template di classe, ogni volta che vengono istanziati, producono una copia del codice oggetto, e se contengono funzioni virtuali producono una copia della ''vtable'' e della ''RTTI''. Questi dati ingrandiscono eccessivamente il programma.
 
=== Annullamento dell'argomento di ''delete'' ===
 
'''Non annullare un puntatore dopo aver chiamato ''delete'' su di esso, se sei sicuro che tale puntatore non verrà più usato.'''
Riga 328:
Normalmente bisognerebbe, in fase di progettazione, cercare di assegnare ogni oggetto ad un proprietario, che avrà la responsabilità di distruggerlo.
Solo quando tale assegnazione è difficile, in quanto più oggetti tendono a rimpallarsi la responsabilità di distruggere un oggetto, risulta opportuno usare uno smart-pointer con reference-count oppure una libreria di garbage-collection.
 
=== Il modificatore ''volatile'' ===
 
'''Non definire sistematicamente ''volatile'' ogni variabile, ma solo quelle che vengono modificate in modo asincrono da dispositivi hardware o da altri thread.'''
 
L'uso del modificatore ''volatile'' impedisce al compilatore di allocare una variabile in un registro.
Questo garantisce che tutti i dispositivi e tutti i thread ''vedano'' la stessa variabile, ma rende molto più lente le operazioni che manipolano tale variabile.
 
== Come evitare inutili costruzioni e le distruzioni di oggetti ==