Oggetti temporanei
In alcuni casi, è necessario che il compilatore crei gli oggetti temporanei.questi oggetti temporanei possono essere creati per i seguenti motivi:
Per inizializzare a const riferimento con un inizializzatore di un tipo diverso da quello del tipo sottostante del riferimento inizializzato.
Per archiviare il valore restituito di una funzione che restituisce un tipo definito dall'utente.Questi temporaries vengono creati solo se il programma non copia il valore restituito a un oggetto.Di seguito è riportato un esempio:
UDT Func1(); // Declare a function that returns a user-defined // type. ... Func1(); // Call Func1, but discard return value. // A temporary object is created to store the return // value.
Poiché il valore restituito non viene copiato in un altro oggetto, viene creato un oggetto temporaneo.Un più comune caso in cui i temporaries vengono creati durante la valutazione di un'espressione in cui le funzioni di operatori di overload devono essere chiamate.Queste funzioni di operatori di overload restituiscono un tipo definito dall'utente che non viene copiato spesso con un altro oggetto.
Valutare l'espressione ComplexResult = Complex1 + Complex2 + Complex3.l'espressione Complex1 + Complex2 viene valutato e il risultato viene archiviato in un oggetto temporaneo.Successivamente, l'espressione temporaneo + Complex3 viene valutato e il risultato viene copiato a ComplexResult supponendo che l'operatore di assegnazione non viene sottoposto a overload).
Per archiviare il risultato di un cast su un tipo definito dall'utente.Quando un oggetto di un tipo specificato in modo esplicito viene convertito in un tipo definito dall'utente, il nuovo oggetto viene costruito quale oggetto temporaneo.
Gli oggetti temporanei hanno una durata definita dal momento della creazione e dal punto in cui vengono eliminati.Qualsiasi espressione che crea più di un oggetto temporaneo che li elimina in ordine inverso in cui sono stati creati.Punti in cui la distruzione si verifica sono riportati nella tabella seguente.
Punti di eliminazione degli oggetti temporanei
temporaneo di motivo creato |
punto di distruzione |
---|---|
Risultato della valutazione di espressioni |
Tutti i temporaries creati come risultato della valutazione delle espressioni vengono eliminati alla fine di un'istruzione di espressione (ovvero al punto e virgola), o alla fine delle espressioni di controllo per for, if, while, doe switch istruzioni. |
inizializzare const riferimenti |
Se un inizializzatore non è un l-value dello stesso tipo del riferimento inizializzato, un temporaneo del tipo di oggetto sottostante viene creato e inizializzato con l'espressione di inizializzazione.Questo oggetto temporaneo viene eliminato immediatamente dopo che l'oggetto di riferimento a cui è associato viene eliminato. |