Sdílet prostřednictvím


Dočasných objektů

V některých případech je nezbytné vytvořit dočasné objekty kompilátoru.Tyto dočasné objekty lze vytvořit z následujících důvodů:

  • Inicializace const odkaz s inicializátor typu, který se liší od základní typ odkazu inicializován.

  • Uložení vrácená hodnota funkce, která vrací typ definovaný uživatelem.Tyto temporaries jsou vytvořeny pouze v případě, že program nebude kopírovat vrácenou hodnotu na objekt.Příklad:

    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.
    

    Protože vrácená hodnota není zkopírován do jiného objektu, je vytvořen dočasný objekt.Další běžný případ, kde jsou vytvořeny temporaries je při vyhodnocení výrazu, kde musí být volána funkce přetíženého operátoru.Vrátí tyto funkce přetíženého operátoru typ definovaný uživatelem, který často není zkopírován do jiného objektu.

    Zvažte výraz ComplexResult = Complex1 + Complex2 + Complex3.Výraz Complex1 + Complex2 je vyhodnocena a výsledek je uložen v dočasné objektu.Další, výraz dočasné+ Complex3 je vyhodnocena a výsledek je zkopírován do ComplexResult (za předpokladu, že operátor přiřazení není přetížení). 

  • K ukládání výsledků odevzdaných na typ definovaný uživatelem.Když objekt daného typu explicitně převést na typ definovaný uživatelem, je vytvořen nový objekt jako dočasný objekt.

Dočasné objekty mají životností, která je definována bodem jejich vytváření a bod, ve kterém jsou zničeny.Libovolný výraz, který vytvoří dočasný objekt více nakonec zničí je v obráceném pořadí, ve kterém byly vytvořeny.V následující tabulce jsou uvedeny body, při kterých dojde k likvidaci.

Zničení bodů pro dočasné objekty

Z důvodu dočasného vytvořen

Bod zničení

Výsledek vyhodnocení výrazu

Všechny temporaries, které jsou vytvořeny z vyhodnocení výrazu jsou zničeny na konci příkaz výrazu (je na středník), nebo na konci řízení výrazy pro for, if, while, do, a switch příkazy.

Inicializace const odkazy

Pokud inicializátor hodnotu l stejného typu jako referenční inicializován, dočasnou základní typ objektu je vytvořen a spuštěn s inicializační výraz.Tento dočasný objekt zničený ihned po zničení objektu odkaz, na který je vázán.

Viz také

Referenční dokumentace

Speciální funkce členů (C++)