Есть некая фабрика:
TBar * foo()
{
return new TBar(); // здесь конструктор TBar бросает исключение
}
Если конструктор TBar бросит исключение, мы получим утечку памяти, выделенной для нового объекта TBar. Верно?
Ответ
Нет, неверно. Если не рассматривать выделения памяти внутри конструктора TBar, то утечек не будет. В языке C++ объект считается созданным только в тот момент, когда его конструктор завершит выполнение без ошибок. Здесь этого не происходит, поэтому объект никогда не был создан, а, значит, и память под него "как бы" не выделялась. Т.е. компилятор обязан корректно освободить память, в которой будет находится объект, в случае исключения в его конструкторе.
Комментариев нет:
Отправить комментарий