john5632 Ответов: 2

Свободная память при вызове конструктора exeception


Привет,

Если конструктор бросает какой-либо execpetion после выделения некоторой памяти (используя new) в куче, то как мы можем освободить эту выделенную память?

Что я уже пробовал:

Если конструктор бросает какой-либо execpetion после выделения некоторой памяти (используя new) в куче, то как мы можем освободить эту выделенную память?

2 Ответов

Рейтинг:
0

Jochen Arndt

Просто обрабатывать исключения внутри поймать все заблокировать и повторно сгенерировать исключение:

MyClass::MyClass() :
    member1(NULL)
    ,member2(NULL)
{
    // Initialise all pointers to memory to be allocated with NULL here or
    // as shown above.
    // Then delete can be safely called for them.
    //member1 = NULL;
    //member2 = NULL;
    try
    {
        // Memory allocation
        member1 = new Member1Type;
        member2 = new Member2Type;
    }
    catch (...)
    {
        // Cleanup here deleting all allocated memory
        delete member2;
        delete member1;

        // Re-throw the exception so that it can be handled again
        throw();
    }
}

Поскольку освобождение памяти обычно также выполняется в деструкторе, обычно пишется функция очистки, которая может быть вызвана из деструктора и внутри него. catch блок.


CPallini

5.