En anexar a JaredPar respuesta
1-habitual ctor, 2-función-como-ctor con objeto temporal.
Compile esta fuente en algún lugar aquí http://melpon.org/wandbox/ con diferentes compiladores
// turn off rvo for clang, gcc with '-fno-elide-constructors'
#include <stdio.h>
class Thing {
public:
Thing(const char*){puts(__FUNCTION__ );}
Thing(const Thing&){puts(__FUNCTION__ );}
~Thing(){puts(__FUNCTION__);}
};
int main(int /*argc*/, const char** /*argv*/) {
Thing myThing = Thing("asdf");
}
Y verás el resultado.
De ISO / IEC 14882 2003-10-15
8.5, parte 12
Su primera y segunda construcción se llaman inicialización directa
12.1, parte 13
Se puede usar una conversión de tipo de notación funcional (5.2.3) para crear nuevos objetos de su tipo. [Nota: La sintaxis parece una llamada explícita del constructor. ] ... Un objeto creado de esta manera no tiene nombre. [Nota: 12.2 describe la vida útil de los objetos temporales. ] [Nota: las llamadas explícitas de constructor no producen valores de l, ver 3.10. ]
Dónde leer sobre RVO:
12 Funciones especiales para miembros / 12.8 Copia de objetos de clase / Parte 15
Cuando se cumplen ciertos criterios, se permite que una implementación omita la construcción de copia de un objeto de clase, incluso si el constructor y / o destructor de copia para el objeto tiene efectos secundarios .
Desactívelo con el indicador del compilador del comentario para ver dicho comportamiento de copia)