#include <iostream>
using namespace std;
class A
{
public:
~A()
{
cout << "A::~A()" << endl;
}
};
#define USE_DYNAMIC_ALLOC
class B: public A
{
public:
B()
{
#ifdef USE_DYNAMIC_ALLOC
ptr = new char[1 << 20];
#endif
}
~B()
{
#ifdef USE_DYNAMIC_ALLOC
delete[] ptr;
#endif
cout << "B::~B()" << endl;
}
#ifdef USE_DYNAMIC_ALLOC
char *ptr;
#else
char ptr[1 << 20];
#endif
};
int _tmain(int argc, _TCHAR* argv[])
{
for(int i = 0; i < 100000; ++i)
{
A *a = new B;
delete a;
}
return 0;
}
Если память выделяется динамически — утечка есть. Если не динамически, то утечки нет. Чтобы включить/выключить используйте макрос USE_DYNAMIC_ALLOC. Деструктор специально не виртуальный, для того чтобы вызывать утечку.