Bonjour, prenons le code suivant:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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:
ctor
copy ctor
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)?