Midlertidig genstand

Midlertidige objekter  - i programmering, objekter, som compileren opretter automatisk under evalueringen af ​​udtryk . Sådanne genstande har intet navn og destrueres, så snart de ikke længere er nødvendige.

C++-sproget kalder konstruktører til dem (efter behov) og destruktorer (efter at have udført udtrykket). Dette er vigtigt for string_view C++17- objektet, for eksempel .

Når C++-arrays initialiseres, forsvinder det midlertidige objekt, før det næste element initialiseres.

Eksempel

streng r = streng ( "1" ) + "2" + "3" ;

Denne kode fungerer sådan her ( ctor - constructor , dtor - destructor ).

streng 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 ();

Et eksempel, hvor levetiden for et objekt er vigtig

std :: wstring expandFileName ( const std :: wstring & x ); // får den fulde vej. Kræver null-terminality - derfor ved input wstring std :: wstring_view extractFilePath ( std :: wstring_view x ); // udtræk root + mapper + afgrænser fra sti std :: wstring tempFileName () { returner std :: wstring ( extractFilePath ( expandFileName ( someFile ))) . tilføj ( L "~filnavn.tmp" ); }

C++ garanterer, at den midlertidige streng vil blive ødelagt senere end dem , der "snylter" på den, "materialer" til en anden, lige så midlertidig streng . expandFileName(someFile)wstring_viewstd::wstring(...)

Returværdioptimering

På andre sprog

Næsten alle sprog (undtagen de mest lave niveauer) er i stand til automatisk at oprette midlertidige variabler for mellemresultater af simple typer ( heltal , brøk , pointer ). Mange sprog ( Pascal ) har et lignende system for strenge . Næsten alle skrald-opsamlede programmeringssprog ( C# , Java ) producerer mellemresultater af enhver type - for dem er der trods alt ingen forskel mellem et permanent og et midlertidigt objekt. Kun C++ er i stand til automatisk at oprette mellemobjekter af vilkårlige typer ved at kalde deres konstruktør og destruktor.