Tillfälligt föremål

Temporära objekt  - i programmering, objekt som kompilatorn skapar automatiskt under utvärderingen av uttryck . Sådana föremål har inget namn och förstörs så snart de inte längre behövs.

C++-språket anropar konstruktörer för dem (efter behov) och destruktorer (efter exekvering av uttrycket). Detta är viktigt för string_view C++17- objektet, till exempel .

När C++-matriser initieras, försvinner det temporära objektet innan nästa element initieras.

Exempel

sträng r = sträng ( "1" ) + "2" + "3" ;

Den här koden fungerar så här ( ctor -constructor ,  - destructor ) . dtor

sträng r , tmp1 , tmp2 , tmp3 ; tmp1 . ctor ( "1" ); tmp2 . ctor (); tmp2 = tmp1 + "2" ; tmp3 . ctor (); tmp3 = tmp2 + "3" ; r . ctor ( tmp3 ); tmp3 . dtor (); tmp2 . dtor (); tmp1 . dtor ();

Ett exempel där ett objekts livslängd är viktig

std :: wstring expandFileName ( const std :: wstring & x ); // får hela vägen. Kräver null-terminalitet - därför vid ingången wstring std :: wstring_view extractFilePath ( std :: wstring_view x ); // extrahera root + kataloger + avgränsare från sökväg std :: wstring tempFileName () { returnera std :: wstring ( extraheraFilePath ( expanderaFileName ( someFile ))) . append ( L "~filnamn.tmp" ); }

C++ garanterar att den temporära strängen kommer att förstöras senare än de som "parasiterar" på den, "materialiserar" till en annan, lika temporär sträng . expandFileName(someFile)wstring_viewstd::wstring(...)

Returvärdeoptimering

På andra språk

Nästan alla språk (förutom de mest låga) kan automatiskt skapa tillfälliga variabler för mellanliggande resultat av enkla typer ( heltal , bråktal , pekare ). Många språk ( Pascal ) har ett liknande system för strängar . Nästan alla skräpinsamlade programmeringsspråk ( C# , Java ) ger mellanresultat av vilken typ som helst - för dem är det trots allt ingen skillnad mellan ett permanent och ett tillfälligt objekt. Endast C++ kan automatiskt skapa mellanobjekt av godtyckliga typer genom att anropa deras konstruktor och destruktor.