#include #include "A.h" using namespace std; A getA(int v) { A a(v); printf("a=%p\n", (void*)&a); return a; } int main(void) { cout << getA(10) + getA(20) << endl; cout << "=======================" << endl; A a(10); A b(20); cout << a + b << endl; return 0; } // Remarque sur la creation d'objets temporaire a l'aide du constructeur // par recopie... // // L'appel au constructeur par recopie depend de son prototype... // avec ou sans const& ...! // // friend A operator+(A anA1, A anA2); // => Appel au constructeur par recopie // // friend A operator+(const A& anA1, const A& anA2); // => Pas d'appel au constructeur par recopie // // Mais ce n'est pas si simple... voir l'exemple si dessus ou, // pour memoire on a friend A operator+(A anA1, A anA2); // - Dans un cas (avant ==...==): // il n'y a pas d'appel au constructeur par recopie // - Dans l'autre cas (apres ==...==): // il y a appel au constructeur par recopie! // // On peut supposer que dans le 1er cas (avant ==...==) il y a une // sorte d'optimisation du compilateur qui, au lieu de détruire un // objet pour en recreer un a l'identique, utilise celui qui normalement // doit etre detruit...?