Bonjour les gens !
Après 8 ans de Java, j'essaie tant bien que mal de me remettre au C++, mais le petit bout de code suivant me pose bien des soucis :
class1.cpp
class2.cpp
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 #include "class1.h" Class1::Class1() { }
main.cpp
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 #include "class2.h" Class2::Class2() { } Class2::~Class2() { }
Comme vous pouvez le voir aux deux assertions :
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 #include "class1.h" #include "class2.h" #include <iostream> #include <cassert> void* ptr; Class1 test1() { Class1 class1; ptr = &class1; return class1; } Class2 test2() { Class2 class2; ptr = &class2; return class2; } int main(int argc, char *argv[]) { Class1 class1 = test1(); assert (ptr != &class1); Class2 class2 = test2(); assert (ptr == &class2); }
- dans un cas l'instance de Class1 renvoyée par test1() est DIFFERENTE de celle instanciée dans test1()... et je dis ça parce que les adresses en mémoire sont différentes : cf premier "assert".
- dans l'autre cas, l'instance de Class2 renvoyée par test2() est LA MEME que celle instanciée dans test2() : cf deuxième "assert".
Pourtant, la seule différence entre Class1 et Class2 est le fait que dans j'ai explicitement défini le destructeur dans Class2 !
Si quelqu'un pouvait m'expliquer ce comportement curieux, ça m'éviterait de passer une nouvelle nuit blanche
Merci beaucoup par avance !
Partager