Bonjour à tous,
Je suis en train de me former à l'utilisation des smart pointers de la STL et je faisais des tests sur unique_ptr. Je développe sous Orwell Dev-C++, un fork de Dev-C++ qui supporte C++11.
J'ai une classe basique qui affiche des phrases dans la console pour contrôler ce qui se passe au niveau des constructions, destructions...
Voilà le .h
et le .cpp
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 #ifndef _TEST_ #define _TEST class Test { public: Test(); Test(int i); void aboie(); ~Test(); }; #endif
Rien d'intelligent là dedans, je découvre...
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 #include "Test.h" #include<iostream> Test::Test() { std::cout << this << ": Construction basique." << std::endl; }; Test::Test(int i) { std::cout << this << ": Construction parametree:" << i << std::endl; }; void Test::aboie() { std::cout << this << ": Waf waf !" << std::endl; } Test::~Test() { std::cout << this << ": Destruction" << std::endl; }
Maintenant, j'ai voulu faire planter le programme pour voir ce qui se passait quand on appelait une méthode de l'objet géré après un release.
Voilà mon main :
et voilà le résultat :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 #include "Test.h" #include <memory> int main() { std::unique_ptr<Test> t(new Test), t2; t->aboie(); t.release(); t->aboie(); return 0; }
J'ai donc le pointeur NULL qui aboie joyeusement... J'ai très peur de cette voix d'outre tombe !!
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 0x8b1818: Construction basique. 0x8b1818: Waf waf ! 0: Waf waf ! -------------------------------- Process exited with return value 0 Press any key to continue . . .
Donc, est-ce un comportement normal ou alors une mauvaise implémentation de la part du compilateur d'Orwell Dev-C++.
Ou pour parler autrement, dois-je me séparer directement de cet IDE que j'apprécie fortement ?
Partager