Io ci sono riuscito così (ma non garantisco nulla) :
codice:
// tutti gli altri header vanno sopra o si rischiano problemi di compilazione.
#ifdef _DEBUG
#define _CRTDBG_MAP_ALLOC
#endif
#include <crtdbg.h>
#ifdef _DEBUG
#define DEBUG_CLIENTBLOCK new( _CLIENT_BLOCK, __FILE__, __LINE__)
#else
#define DEBUG_CLIENTBLOCK
#endif
#ifdef _DEBUG
#define new DEBUG_CLIENTBLOCK
#endif
using namespace std;
int main(int argc, char* argv[]) {
// {
auto_ptr<int> k(new int(0));
// }
_CrtDumpMemoryLeaks();
}
Però la funzione rileva se la memoria non è stata liberata nel momento in cui è invocata, non in generale. In questo esempio, l'auto_ptr rilascia la memoria quando il main termina quindi non c'è un memory leak anche se viene segnalato da _CrtDumpMemoryLeaks e lo puoi verificare decommentando le due graffe che forzano l'uscita dallo scope dell'auto_ptr.
Insomma attento ai falsi allarmi e non dare per oro colato le informazioni che fornisce.