Unique_ptr : Orwell Dev-C++ fait-il revivre les morts ?
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
Code:
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 |
et le .cpp
Code:
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;
} |
Rien d'intelligent là dedans, je découvre...
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 :
Code:
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;
} |
et voilà le résultat :
Code:
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 . . . |
J'ai donc le pointeur NULL qui aboie joyeusement... J'ai très peur de cette voix d'outre tombe !!
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 ?