2016-09-20 1 views
0

я не могу найти ответ на этот простой вопрос:Я просачиваю построенный объект при использовании нового для создания объекта, чей конструктор выбрасывает?

данного класса, который бросает в его конструктор:

class Foo { 
    Foo() { throw std::logic_error(); } 
} 

если я создаю новый объект из этого класса, используя оператор new, то я просачиваться созданный объект?

new Foo(); // << does this leak the Foo? 

ответ

1

Нет, утечки памяти у вас не будет. Тем не менее, справедливо сказать, что бросать в конструктор обычно считают плохой практикой, так как вы можете в итоге построить наполовину объект (в зависимости от вашего класса), а затем вы должны полагаться на пользователей вашего класса, чтобы обнаружить сбой строительства тестирование переменных флага какого-либо типа.

0

Нет, если конструктор Foo «s бросает, что означает Foo объект никогда не существовало. Там нет утечки. Если у вас есть элементы данных, которые были инициализированы априори, отдельные деструкторы этих членов будут выполняться, поскольку исключение оставляет блок-конструктор конструктора