Ideiglenes objektum

Ideiglenes objektumok  - a programozásban olyan objektumok, amelyeket a fordító automatikusan létrehoz a kifejezések kiértékelése során . Az ilyen tárgyaknak nincs neve, és megsemmisülnek, amint már nincs rájuk szükség.

A C++ nyelv konstruktorokat (szükség szerint) és destruktorokat (a kifejezés végrehajtása után) hív meg. Ez fontos például a string_view C++17 objektumnál .

A C++ tömbök inicializálásakor az ideiglenes objektum eltűnik a következő elem inicializálása előtt.

Példa

string r = karakterlánc ( "1" ) + "2" + "3" ;

Ez a kód így működik ( ctor - konstruktor , dtor - destruktor ).

string r , tmp1 , tmp2 , tmp3 ; tmp1 . ctor ( "1" ); tmp2 . színész (); tmp2 = tmp1 + "2" ; tmp3 . színész (); tmp3 = tmp2 + "3" ; r . ctor ( tmp3 ); tmp3 . dtor (); tmp2 . dtor (); tmp1 . dtor ();

Példa, ahol egy objektum élettartama fontos

std :: wstring expandFileName ( const std :: wstring & x ); // megkapja a teljes elérési utat. Null-terminalitást igényel – ezért a bemeneten a wstring std :: wstring_view extractFilePath ( std :: wstring_view x ); // gyökér + könyvtárak + határoló kivonása az elérési útból std :: wstring tempFájlnév () { return std :: wstring ( extractFilePath ( expandFileName ( someFile ))) . append ( L "~fájlnév.tmp" ); }

A C++ garantálja, hogy az ideiglenes karakterlánc később megsemmisül, mint azok , amelyek "parazitálnak" rajta, és egy másik, ugyanilyen ideiglenes karakterláncba "materializálódnak" . expandFileName(someFile)wstring_viewstd::wstring(...)

Megtérülési érték optimalizálása

Más nyelveken

Szinte minden nyelv (kivéve a legalacsonyabb szintű nyelveket) képes automatikusan ideiglenes változókat létrehozni az egyszerű típusú ( egész , tört , mutató ) köztes eredményekhez. Sok nyelvben ( Pascal ) van hasonló rendszer a karakterláncokhoz . Szinte minden szemétbe gyűjtött programozási nyelv ( C# , Java ) bármilyen típusú köztes eredményt produkál – elvégre számukra nincs különbség állandó és ideiglenes objektum között. Csak a C++ képes automatikusan létrehozni tetszőleges típusú köztes objektumokat konstruktoruk és destruktoruk meghívásával.