Bonjour,
Je suis en train de tester le comportement du constructeur par copie sous C++
Voici le code template
Le comportement est normal, si je fais
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
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36 #include <iostream> using namespace std; class A{ public: int i; A(int i) : i( i ){ cout << "Constructor" << endl;}; ~A(){ cout << "Destructor" << endl;}; A(const A& a) { cout << "Constructor copy" << endl; i = a.i; }; A& operator=(const A& a){cout <<"Operator=" << endl;}; }; A foo() { cout << "inside foo" << endl; A a( 1 ); return a; }; int main() { A b( foo() ); //A a( b ); cout << " b.i " << b.i << endl; system("pause"); return 0; }Le output est affiché normalement
Code : Sélectionner tout - Visualiser dans une fenêtre à part A b( foo() );Par contre si je modifie la méthode foo()
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 inside foo Constructor Constructor copy Destructor b.i 1 Press any key to continue . . .
Le output est comme ça
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 A foo() { cout << "inside foo" << endl; return A( 1 ); };
La question est la copie se fait par quelle méthode? D'après le output, les valeurs de b sont bien initialisés mais je ne vois pas quelle méthode a été utilisées?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 inside foo Constructor b.i 1 Press any key to continue . . .
Merci
Partager