@Hrefix

Когда неявно вызывается деструктор?

Поиск по вопросам не дал ответов. Гугл и книги не дают четкого ответа.
Вопрос для меня довольно-таки не очевидный. Прошу перечислить возможные варианты (за исключением вызовов по выходу из области видимости блока; плюс, из той же оперы, по return)
  • Вопрос задан
  • 726 просмотров
Пригласить эксперта
Ответы на вопрос 2
Olej
@Olej
инженер, программист, преподаватель
Прошу перечислить возможные варианты

Вариант единственный: деструктор в C++ вызывается ровно в тот момент, когда уничтожается объект.
Всё. Точка.
Никаких других "вариантов" нет и быть не может, потому что в C++ не может быть сборки мусора.

А вот когда объект уничтожается - тут могут быть некоторые варианты: явное и неявное уничтожение, уничтожение по выходу из блока, уничтожение по эпилогу программы... Здесь разница уже в том. что называют "время жизни" объекта.
Ответ написан
Драфт стандарта n3337:

Destructors are invoked implicitly
— for constructed objects with static storage duration (3.7.1) at program termination (3.6.3),
— for constructed objects with thread storage duration (3.7.2) at thread exit,
— for constructed objects with automatic storage duration (3.7.3) when the block in which an object is created exits (6.7),
— for constructed temporary objects when the lifetime of a temporary object ends (12.2),
— for constructed objects allocated by a new-expression (5.3.4), through use of a delete-expression (5.3.5),
— in several situations due to the handling of exceptions (15.3).
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы