Почему этот код не вызывает утечку памяти?
От: Аноним  
Дата: 27.07.09 14:16
Оценка:
#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. Деструктор специально не виртуальный, для того чтобы вызывать утечку.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.