vector et copy constructor
Bonjour, prenons le code suivant:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| #include <iostream>
#include <vector>
#include <string>
using namespace std;
struct Foo
{
Foo( const string & name = "unknown" ) : name( name ) { cout << "ctor" << endl; }
Foo( const Foo & other ) : name( other.name ) { cout << "copy ctor" << endl; }
Foo & operator = ( const Foo & other ) { name = other.name; cout << "operator =" << endl; }
string name;
};
main()
{
vector< Foo > v;
v.push_back( Foo() );
getchar();
} |
L'ouput donne:Ce qui signifie que le constructeur de copie de Foo est appelé lors du push_back.
Pourquoi fait-il cette copie? Comment l'éviter (étant entendu que l'on ne connait pas à l'avance le nombre d'éléments que l'on va mettre dans le vecteur)?