C++, разрешен ли повторный вызов деструктора?
Подскажите, пожалуйста, что говорит Стандарт C++ про повторный вызов деструктора?
Можно ли вызывать деструктор объекта несколько раз при условии, что объект остается в корректном состоянии?
Ответы (2 шт):
Повторный вызов деструктора, как и любого другого метода объекта после вызова деструктора является неопределнным поведеним, так как жизнь объекта оканчивается при начале вызова деструктора согласно
6.6.3 Object lifetime [basic.life]
The lifetime of an object o of type T ends when:
— (1.3) if T is a class type with a non-trivial destructor (15.4), the destructor call starts, or
— (1.4) the storage which the object occupies is released, or is reused by an object that is not nested within o (6.6.2).
и
15.4 Destructors [class.dtor]
16 Once a destructor is invoked for an object, the object no longer exists; the behavior is undefined if the destructor is invoked for an object whose lifetime has ended (6.6.3).
Нельзя, согласно:
Standard 12.4/14
Once a destructor is invoked for an object, the object no longer exists; the behavior is undefined if the destructor is invoked for an object whose lifetime has ended (3.8).
Теперь ответ на:
Можно ли вызывать деструктор объекта несколько раз при условии, что объект остается в корректном состоянии?
Это тоже нет - так как это уже не существующий с точки зрения стандарта объект, то повторный вызов деструктора приводит к неопределённому поведению в не зависимости от валидности (или корректности) состояния объекта