Väliaikainen esine

Väliaikaiset objektit  - ohjelmoinnissa objektit, jotka kääntäjä luo automaattisesti lausekkeiden arvioinnin aikana . Tällaisilla esineillä ei ole nimeä ja ne tuhotaan heti, kun niitä ei enää tarvita.

C++-kieli kutsuu niille konstruktoreita (tarvittaessa) ja destructoreita (lausekkeen suorittamisen jälkeen). Tämä on tärkeää esimerkiksi string_view C++17 -objektille .

Kun C++-taulukot alustetaan, väliaikainen objekti katoaa ennen kuin seuraava elementti alustetaan.

Esimerkki

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

Tämä koodi toimii näin ( ctor - constructor , dtor - destructor ).

merkkijono r , tmp1 , tmp2 , tmp3 ; tmp1 . ctor ( "1" ); tmp2 . näyttelijä (); tmp2 = tmp1 + "2" ; tmp3 . näyttelijä (); tmp3 = tmp2 + "3" ; r . ctor ( tmp3 ); tmp3 . dtor (); tmp2 . dtor (); tmp1 . dtor ();

Esimerkki, jossa objektin käyttöikä on tärkeä

std :: wstring expandFileName ( const std :: wstring & x ); // saa täyden polun. Edellyttää nollapäätettä - siksi syötteessä wstring std :: wstring_view extractFilePath ( std :: wstring_view x ); // Pura juuri + hakemistot + erotin polusta std :: wstring tempFileName () { return std :: wstring ( extractFilePath ( expandFileName ( someFile ))) . append ( L "~tiedostonimi.tmp" ); }

C++ takaa, että väliaikainen merkkijono tuhoutuu myöhemmin kuin ne , jotka "loiset" siinä, "materialisoituvat" toiseksi, yhtä väliaikaiseksi merkkijonoksi . expandFileName(someFile)wstring_viewstd::wstring(...)

Paluuarvon optimointi

Muilla kielillä

Melkein kaikki kielet (paitsi kaikkein matalan tason kielet) pystyvät luomaan automaattisesti tilapäisiä muuttujia yksinkertaisten tyyppien ( kokonaisluku , murtoluku , osoitin ) välituloksille. Monilla kielillä ( Pascal ) on samanlainen merkkijonojärjestelmä . Melkein kaikki roskakoriin kerätyt ohjelmointikielet ( C# , Java ) tuottavat minkä tahansa tyyppisiä välituloksia - loppujen lopuksi niille ei ole eroa pysyvän ja väliaikaisen objektin välillä. Vain C++ pystyy luomaan automaattisesti mielivaltaisen tyyppisiä väliobjekteja kutsumalla niiden rakentajaa ja destruktoria.