un corps peut expliquer le comportement dans la sortie lors de l'exécution du code suivant. Je suis un peu confus à propos du nombre de fois que le constructeur de copie est appelé.Problème de constructeur de copie lors de la lecture d'un objet directement dans un vecteur en utilisant des itérateurs de copie et de flux.
using namespace std;
class A {
int i;
public:
A() {
};
A(const A& a) {
i = a.i;
cout << "copy constructor invoked" << endl;
};
A(int num) {
i = num;
};
A& operator = (const A&a) {
i = a.i;
// cout << "assignment operator invoked" << endl;
};
~A() {
cout << "destructor called" << endl;
};
friend ostream& operator << (ostream & out, const A& a);
friend istream& operator >> (istream &in, A&a);
};
ostream & operator << (ostream &out, const A& a) {
out << a.i;
return out;
}
istream & operator >> (istream & in, A&a) {
in >> a.i;
return in;
}
int main() {
vector<A> vA;
copy(istream_iterator<A>(cin), istream_iterator<A>(), back_inserter(vA));
// copy(vA.begin(), vA.end(), ostream_iterator<A>(cout, "\t"));
return 0;
}
La sortie observée est
[email protected]:~/workspace/ostream_iterator/src$ ./a.out
40
copy constructor invoked
copy constructor invoked
copy constructor invoked
copy constructor invoked
copy constructor invoked
copy constructor invoked
copy constructor invoked
copy constructor invoked
copy constructor invoked
copy constructor invoked
copy constructor invoked
destructor called
destructor called
destructor called
destructor called
destructor called
destructor called
destructor called
destructor called
destructor called
destructor called
destructor called
destructor called
destructor called
[email protected]:~/workspace/ostream_iterator/src$
Je pensais que le constructeur de copie serait appelée une fois lors de l'insertion dans le vecteur, comme des objets conteneurs stocke des valeurs.
Avez-vous essayé d'activer les optimisations? –
même avec optimisation de niveau 3 je reçois le même nombre d'appels de construtor de copie, et j'utilise gcc version 4.4.3. – ajayreddy