Bonjour,
je ne comprend pas pourquoi ce code ne fonctionne pas
Le programme plante lors de la libération de l'instance de TTest, lorsque le bloc mémoire est libéré (une assertion en debug : _ASSERTE(_BLOCK_TYPE_IS_VALID(pHead->nBlockUse)); ). Ma classe n'a pas de destructeur virtuel, mais c'est sur le bon type que la libération doit s'effectuer.
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 class Base { public: virtual void DoIt() {}; }; class TTest: public Base {}; int _tmain(int argc, _TCHAR* argv[]) { { std::auto_ptr<TTest> test = new TTest(); // (1) } getchar(); return 0; }
Pourtant en changeant (1) paril n'y a plus de problème. Il me semblait que ces deux versions étaient équivalentes .
Code : Sélectionner tout - Visualiser dans une fenêtre à part std::auto_ptr<TTest> test ( new TTest() );
Partager