Obiect temporar

Obiecte temporare  - în programare, obiecte pe care compilatorul le creează automat în timpul evaluării expresiilor . Astfel de obiecte nu au nume și sunt distruse de îndată ce nu mai sunt necesare.

Limbajul C++ cheamă constructori pentru ei (după caz) și destructori (după executarea expresiei). Acest lucru este important pentru obiectul string_view C++17 , de exemplu .

Când matricele C++ sunt inițializate, obiectul temporar dispare înainte ca următorul element să fie inițializat.

Exemplu

șir r = șir ( "1" ) + "2" + "3" ;

Acest cod funcționează astfel ( ctor - constructor , dtor - destructor ).

șir 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 ();

Un exemplu în care durata de viață a unui obiect este importantă

std :: wstring expandFileName ( const std :: wstring & x ); // obține calea completă. Necesită null-terminality - prin urmare, la intrare wstring std :: wstring_view extractFilePath ( std :: wstring_view x ); // extrage rădăcină + directoare + delimitator din cale std :: wstring tempFileName () { return std :: wstring ( extractFilePath ( expandFileName ( someFile ))) . append ( L "~filename.tmp" ); }

C++ garantează că șirul temporar va fi distrus mai târziu decât cei care „parazitează” pe el, se „materializează” într-un alt șir la fel de temporar . expandFileName(someFile)wstring_viewstd::wstring(...)

Optimizarea valorii returnate

În alte limbi

Aproape toate limbile (cu excepția celor de nivel scăzut) sunt capabile să creeze automat variabile temporare pentru rezultate intermediare de tipuri simple ( întreg , fracțional , pointer ). Multe limbi ( Pascal ) au un sistem similar pentru șiruri . Aproape toate limbajele de programare colectate de gunoi ( C# , Java ) produc rezultate intermediare de orice tip - la urma urmei, pentru ele nu există nicio diferență între un obiect permanent și unul temporar. Numai C++ este capabil să creeze automat obiecte intermediare de tipuri arbitrare apelând constructorul și destructorul lor.