Je viens tout juste de découvrir auto_ptr en C++. La gestion des exceptions avec auto_ptr c'est vraiment bien et c'est pourquoi j'ai fait des tests pour l'intégrer dans mes futurs programmes.
Je me suis donc fait un programme avec deux fonctions, une qui devrait faire un memory leak (f_leak) et une autre qui devrait ne pas en faire (f_noleak).
Code :
#define _CRTDBG_MAP_ALLOC
#include <stdlib.h>
#include <crtdbg.h>
#include <memory>
using namespace std;
void f_leak()
{
int *p = NULL;
p = new int;
int a = 2, b = 0, c;
c = a / b; // cause une exception
delete p;
}
void f_noleak()
{
auto_ptr<int> p(new int);
*p = 100;
int a = 2, b = 0, c;
c = a / b; // cause une exception
}
int main()
{
try
{
// essayez avec f_leak et f_noleak
// f_leak();
f_noleak();
}
catch(...)
{
}
_CrtDumpMemoryLeaks();
}
Selon la description que j'ai lu d'auto_ptr et la compréhension que j'en ai eu, la fonction f_noleak ne devrait pas causer de memory leak, mais elle en cause quand même... Aurais-je mal compris auto_ptr ?
J'utilise Visual Studio.NET