Condividi tramite


Oggetti temporanei

Un oggetto temporaneo è un oggetto senza nome creato dal compilatore per archiviare un valore temporaneo.

Osservazioni:

In alcuni casi, è necessario che il compilatore crei oggetti temporanei. Questi oggetti temporanei possono essere creati per i seguenti motivi:

  • Per inizializzare un const riferimento con un inizializzatore di un tipo diverso dal tipo sottostante del riferimento inizializzato.

  • Per archiviare il valore restituito di una funzione che restituisce un tipo definito dall'utente (UDT). Questi elementi vengono creati temporaneamente solo se il programma non copia il valore restituito in un oggetto . Ad 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 caso più comune in cui i temporanei vengono creati durante la valutazione di un'espressione in cui le funzioni degli operatori sottoposti a overload devono essere chiamate. Queste funzioni di operatore di overload restituiscono un tipo definito dall'utente che spesso non viene copiato in un altro oggetto.

    Valutare l'espressione ComplexResult = Complex1 + Complex2 + Complex3. L'espressione Complex1 + Complex2 viene valutata e il risultato viene archiviato in un oggetto temporaneo. Viene quindi valutata l'espressione temporanea + Complex3 e il risultato viene copiato in (presupponendo che l'operatore di assegnazione non sia sottoposto a ComplexResult overload).

  • Per archiviare il risultato di un cast in un tipo definito dall'utente. Quando un oggetto di un tipo specificato viene convertito in modo esplicito nel tipo definito dall'utente, tale nuovo oggetto viene costruito come oggetto temporaneo.

Gli oggetti temporanei hanno una durata, definita dal punto di creazione e dal punto in cui vengono distrutti. Qualsiasi espressione che crea più di un oggetto temporaneo li elimina in ordine inverso di creazione.

Quando si verifica la distruzione di un temporaneo dipende dalla modalità di utilizzo:

  • Temporaneamente usati per l'inizializzazione dei const riferimenti:
    Se un inizializzatore non è un l-value dello stesso tipo del riferimento da inizializzare, viene creato un oggetto temporaneo del tipo di oggetto sottostante. Viene inizializzato dall'espressione di inizializzazione. Questo oggetto temporaneo viene eliminato definitivamente immediatamente dopo che l'oggetto di riferimento a cui è associato viene eliminato definitivamente. Poiché questa distruzione può verificarsi bene dopo l'espressione che ha creato il temporaneo, viene talvolta definita estensione della durata.

  • Temporaneamente creati come effetto della valutazione delle espressioni:
    Tutti i temporaneamente che non rientrano nella prima categoria e che vengono creati come effetto della valutazione dell'espressione, vengono eliminati definitivamente alla fine dell'istruzione dell'espressione (ovvero, al punto e virgola) o alla fine delle espressioni di controllo per forle istruzioni , ifwhile, do, e switch .

Vedi anche

Blog di Herb Sutter su Riferimenti, semplicemente