Страницы

Поиск по вопросам

понедельник, 1 апреля 2019 г.

Будет ли утечка памяти, если конструктор бросит исключение?

Есть некая фабрика:
TBar * foo() { return new TBar(); // здесь конструктор TBar бросает исключение }
Если конструктор TBar бросит исключение, мы получим утечку памяти, выделенной для нового объекта TBar. Верно?


Ответ

Нет, неверно. Если не рассматривать выделения памяти внутри конструктора TBar, то утечек не будет. В языке C++ объект считается созданным только в тот момент, когда его конструктор завершит выполнение без ошибок. Здесь этого не происходит, поэтому объект никогда не был создан, а, значит, и память под него "как бы" не выделялась. Т.е. компилятор обязан корректно освободить память, в которой будет находится объект, в случае исключения в его конструкторе.

Комментариев нет:

Отправить комментарий