c++ - ser - zona azul madrid mapa
¿Por qué se llama al constructor solo una vez? (2)
Se llama una vez desde la línea
vector<A> v(5,A(1));
llamará al constructor y la línea se convertirá en el vector v (5, X);
donde X es el objeto construido después de llamar al constructor.
Después de eso, se usa el constructor de copia.
Prueba agregar
A(const &A);
A la declaración de clase para verificar esto.
Considere el siguiente programa:
class A
{
public:
A(int i)
{
cout<<"Called"<<endl;
}
};
int main()
{
vector<A> v(5,A(1));
return 0;
}
Obtengo el resultado: http://ideone.com/81XO6
Called
¿Por qué el constructor recibe una llamada solo una vez, incluso si estamos construyendo 5 objetos?
¿Cómo el vector
es manejado internamente por el compilador?
Tu clase tiene dos constructores y solo estás viendo uno de ellos. std::vector
crea sus elementos mediante la construcción de copias desde el elemento original que proporcionó. Para ese propósito, el constructor de copias de la clase A
se llama 5 veces en su ejemplo.
El constructor de copias para A
en su ejemplo está implícitamente declarado y definido por el compilador. Si lo desea, puede declararlo y definirlo usted mismo. Si imprime algo de él, verá que se llama al menos 5 veces.