Dočasný objekt

Dočasné objekty  - v programování objekty, které kompilátor vytváří automaticky při vyhodnocování výrazů . Takové předměty nemají jméno a jsou zničeny, jakmile už nejsou potřeba.

Jazyk C++ pro ně volá konstruktory (podle potřeby) a destruktory (po provedení výrazu). To je důležité například pro objekt string_view C++17 .

Při inicializaci polí C++ dočasný objekt zmizí před inicializací dalšího prvku.

Příklad

řetězec r = řetězec ( "1" ) + "2" + "3" ;

Tento kód funguje takto ( ctor - konstruktor , dtor - destruktor ).

řetězec r , tmp1 , tmp2 , tmp3 ; tmp1 . ctor ( "1" ); tmp2 . ctor (); tmp2 = tmp1 + "2" ; tmp3 . herec (); tmp3 = tmp2 + "3" ; r . ctor ( tmp3 ); tmp3 . dtor (); tmp2 . dtor (); tmp1 . dtor ();

Příklad, kde je důležitá životnost objektu

std :: wstring expandFileName ( const std :: wstring & x ); // získá úplnou cestu. Vyžaduje null-terminalitu - proto na vstupu wstring std :: wstring_view extractFilePath ( std :: wstring_view x ); // extrahujte kořen + adresáře + oddělovač z cesty std :: wstring tempFileName () { return std :: wstring ( extractFilePath ( expandFileName ( someFile ))) . append ( L "~název souboru.tmp" ); }

C++ zaručuje, že dočasný řetězec bude zničen později než ty , které na něm „parazitují“, „materializují“ do jiného, ​​stejně dočasného řetězce . expandFileName(someFile)wstring_viewstd::wstring(...)

Optimalizace návratové hodnoty

V jiných jazycích

Téměř všechny jazyky (kromě většiny nízkoúrovňových) jsou schopny automaticky vytvářet dočasné proměnné pro mezivýsledky jednoduchých typů ( celé číslo , zlomek , ukazatel ). Mnoho jazyků ( Pascal ) má podobný systém pro řetězce . Téměř všechny programovací jazyky ( C# , Java ) produkují mezivýsledky jakéhokoli typu - koneckonců pro ně není žádný rozdíl mezi trvalým a dočasným objektem. Pouze C++ je schopen automaticky vytvářet mezilehlé objekty libovolných typů voláním jejich konstruktoru a destruktoru.