Estoy aprendiendo ctors ahora y tengo algunas preguntas. En estas líneas:C++ creación de objetos y constructor
Foo obj(args);
Foo obj2;
obj = Foo(args);
Foo obj3 = Foo(args);
Primera parte: sólo el 1 constructor llamado (Foo) y obj
se inicializa. Entonces, 1 creación de objeto.
Segunda parte: creación del objeto temporal obj2
, llamando al ctor predeterminado para ello. Las siguientes líneas crearemos otra copia de Foo
y la pasaremos a operator=()
. ¿Está bien? Entonces, 3 objetos temporales locales, 2 llamadas de constructor.
Tercera parte: crea 1 objeto Foo
y pásalo a operator=()
. Entonces, 2 objetos temporales y 1 llamada de ctor.
¿Entiendo esto bien? Y si es cierto, ¿el compilador (por ejemplo, último gcc) optimizará estos en casos comunes?
'operator =()' normalmente recibe su argumento por referencia, por lo que no hay copias al llamarlo. – rodrigo
obj3 se crea realmente utilizando el constructor de copia no el operador de asignación. –