Je connais des conteneurs STL comme vector
qui copie l'objet quand il est ajouté. méthode push_back
ressemble à:Comment les conteneurs STL copient-ils des objets?
void push_back (const T& x);
Je suis surpris de voir qu'il prend l'élément comme référence . J'ai écrit un exemple de programme pour voir comment cela fonctionne.
struct Foo
{
Foo()
{
std::cout << "Inside Foo constructor" << std::endl;
}
Foo(const Foo& f)
{
std::cout << "inside copy constructor" << std::endl;
}
};
Foo f;
std::vector<Foo> foos;
foos.push_back(f);
Cette copie l'objet et je peux le voir appelle copie constructeur.
Ma question est, quand le push_back
prend l'article comme référence, comment il appelle copy-constructor? Ou est-ce que je manque quelque chose ici?
Des pensées ..?
C'est OK quand T a un constructeur sans paramètre. Mais qu'arrivera-t-il quand il aura un constructeur paramétré? Comment le vecteur peut-il initialiser un nouvel objet? –
C'est OK quand T a un constructeur _copy. Ce qui est fait, par défaut, et si vous l'implémentez, à moins que vous ne l'ayez fait explicitement 'private' ou' protected'. – Thomas
J'ai édité ma réponse pour clarifier. – Thomas