Objeto temporal

Objetos temporales  : en programación, objetos que el compilador crea automáticamente durante la evaluación de expresiones . Dichos objetos no tienen nombre y se destruyen tan pronto como ya no se necesitan.

El lenguaje C++ llama a los constructores (según sea necesario) y a los destructores (después de ejecutar la expresión). Esto es importante para el objeto string_view C++17 , por ejemplo .

Cuando se inicializan las matrices de C++, el objeto temporal desaparece antes de que se inicialice el siguiente elemento.

Ejemplo

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

Este código funciona así  ( ctor -constructor , -destructor ) . dtor

cadena 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 ejemplo donde la vida útil de un objeto es importante

std :: wstring expandFileName ( const std :: wstring & x ); // obtiene la ruta completa. Requiere terminalidad nula; por lo tanto, en la entrada wstring std :: wstring_view extractFilePath ( std :: wstring_view x ); // extrae raíz + directorios + delimitador de la ruta std :: wstring nombre del archivo temporal () { return std :: wstring ( extractFilePath ( expandFileName ( someFile ))) . agregar ( L "~nombredearchivo.tmp" ); }

C ++ garantiza que la cadena temporal se destruirá más tarde que aquellos que la "parasitan", se "materializan" en otra cadena igualmente temporal . expandFileName(someFile)wstring_viewstd::wstring(...)

Optimización del valor de retorno

En otros idiomas

Casi todos los lenguajes (excepto los de más bajo nivel) son capaces de crear automáticamente variables temporales para resultados intermedios de tipos simples ( entero , fraccionario , apuntador ). Muchos lenguajes ( Pascal ) tienen un sistema similar para cadenas . Casi todos los lenguajes de programación recolectados en la basura ( C # , Java ) producen resultados intermedios de cualquier tipo; después de todo, para ellos no hay diferencia entre un objeto permanente y uno temporal. Solo C ++ puede crear automáticamente objetos intermedios de tipos arbitrarios llamando a su constructor y destructor.