31 votes

Pourquoi constructeur n'est appelé qu'une seule fois?

Considérez le programme ci-dessous:

 class A
{
    public:
    A(int i)
    {
            cout<<"Called"<<endl;
    }
};

int main()
{
    vector<A> v(5,A(1));
    return 0;
}       
 

Je reçois la sortie: http://ideone.com/81XO6

  Called
 

Pourquoi le constructeur est appelé une seule fois même si nous construisons 5 objets?
Comment vector est géré en interne par le compilateur?

39voto

AndreyT Points 139512

Votre classe a deux constructeurs et vous regardez un seul d'entre eux. std::vector crée ses éléments par la copie de la construction de l' origine de l'élément que vous avez fournies. Pour cela, le constructeur par copie de la classe A est appelé 5 fois dans votre exemple.

Le constructeur par copie pour A dans votre exemple est implicitement déclarée et définie par le compilateur. Si vous le désirez, vous pouvez déclarer et définir vous-même. Si vous avez l'impression de quelque chose d'elle, vous verrez qu'il est appelé au moins 5 fois.

12voto

Ed Heal Points 24309

Il est appelé une fois depuis la ligne

 vector<A> v(5,A(1)); 
 

appellera le constructeur et la ligne deviendra le vecteur v (5, X);

où X est l'objet construit après l'appel du constructeur.

Après cela, le constructeur de copie est utilisé.

Essayez d'ajouter

 A(const &A);
 

À la déclaration de classe pour le vérifier.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X