Bonjour,
je ne comprend pas pourquoi ce code ne fonctionne pas
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;
}
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.
Pourtant en changeant (1) par
Code : Sélectionner tout - Visualiser dans une fenêtre à part
std::auto_ptr<TTest> test ( new TTest() );
il n'y a plus de problème. Il me semblait que ces deux versions étaient équivalentes .