Duplicar posibles:
Why copy constructor is not called in this case?constructor de copia no se invoca
Considere el programa de ejemplo siguiente:
#include <iostream>
using namespace std;
class sample
{
private:
int x;
public:
sample(int a=0) : x(a)
{
cout << "default ctor invoked\n";
}
sample(const sample& obj)
{
cout << "copy ctor invoked\n";
}
};
int main()
{
sample s2 = sample(20); //Line1
sample s3 = 20; //Line2
return 0;
}
En Line1
, primero el constructor de sample
clase se invoca explicitly
con el argumento 20. Entonces esperaba el constructor de copia que se invocará para inicializar s2.
En Line2, primero se invoca al constructor de la clase sample
implicitly
primero con el argumento 20. Aquí también esperé que se invocara el constructor de copia para inicializar s2.
En ambos casos, el constructor de copia no se invoca? ¿Por qué está pasando esto? Creo que hay algo de malo en mi comprensión de la invocación del constructor de copias. ¿Podría alguien corregirme donde estoy yendo mal?
Esto es esperado, permítame intentarlo y encontrar un buen ejemplo –
Las llamadas al constructor de copia pueden omitirse en algunas situaciones. –
@ R.MartinhoFernandes: Ya algunas situaciones. Pero s2 y s3 deben inicializarse de alguna manera. ¿Cómo se hace sin llamar al copiador? –