Bonjour. J'essai de me former au c++ .
Sur l'exemple suivant , j'ai été obligé de supprimer l'instruction delete name car il semble que je passe deux fois dans le destructeur pour le même objet.Je ne vois pas mon erreur.
A la base, j'ai écrit cela car je me demandais ce qui se passait à la suite du return dans la fonction test::operator+ . Il semblerait que le constructeur par recopie est utilisée pour copier les valeurs contenu dans l'objet retourné.
Est ce cela ?C'est bizrre car l'objet est pourtant déjà construit !
Tout cela n'est vraiment pas clair pour moi, si quelqu'un pouvait m'apporter la lumière ...
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
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87 #include "stdafx.h" #include <iostream.h> #include <string.h> class test { int x; char * name; int num; static int cpt; public: //constructeurs test(int c1=0,char * c2 ="?"); test(test &); test operator + (test &); void showName(); //destructeurs ~test() { cout<<"destructeur"; showName(); //delete name; } }; test::test(int c1,char * c2) { int len; len =strlen(c2); name=new char[len+1]; strcpy(name,c2); x=c1; cout <<"constructeur par defaut"; showName(); } test::test(test & obj) { int len; len=strlen(obj.name + strlen("copie ")); name=new char[len +1]; strcpy(name,"copie "); strcat(name,obj.name); cout <<"constructeur par recopie"; showName(); x= obj.x; } test test::operator+(test & obj) { test tmp; tmp.x= x+ obj.x; cout <<"avant return\n"; return tmp; } void test::showName() { unsigned int i; cout<<" "; for (i=0;i<strlen(name);i++) { cout<<name[i]; } cout<<"\n"; } int main(int argc, char* argv[]) { test a=test (5,"a"); test b(10,"b"); test c(20,"c"); cout<<"avant adition\n"; c=b + c; cout<<"après adition\n"; return 0; }
[Balises CODE rajoutées par Loulou24, merci d'y penser à l'avenir]
Partager