C++ называет деструкторы для статических переменных класса и глобального?

Из моего примера программы похоже, что это действительно называет деструкторы в обоих случаями. В какой точке это называет деструкторы для глобальных и статических переменных класса, так как они должны быть выделены в разделе данных стопки программы?

50
задан AraK 4 February 2010 в 16:04
поделиться

2 ответа

Из § 3.6.3 стандарта C ++ 03:

Деструкторы (12.4) для инициализированных объектов со статической продолжительностью хранения (объявленные в области видимости блока или в области пространства имен) вызываются в результате возврата из основного и в результате вызова exit (18.3). Эти объекты уничтожаются в порядке, обратном завершению их конструктора или завершению их динамической инициализации. Если объект инициализируется статически, он уничтожается в том же порядке, как если бы объект был инициализирован динамически. Для объекта типа массива или класса все подобъекты этого объекта уничтожаются до того, как будет уничтожен любой локальный объект со статической продолжительностью хранения, инициализированный во время построения подобъектов.

Кроме того, в § 9.4.2 7 говорится:

Статические элементы данных инициализируются и уничтожаются точно так же, как нелокальные объекты (3.6.2, 3.6.3).

Однако, если деструктор не имеет наблюдаемого поведения, он не может быть вызван. Терри Махаффи подробно описывает это в своем ответе на вопрос «Гарантируется ли, что деструктор C ++ не будет вызван до конца блока?» .

63
ответ дан 7 November 2019 в 11:05
поделиться

Где-то после "main"

(вы не можете знать или полагаться на точный порядок, в котором они вызываются)

2
ответ дан 7 November 2019 в 11:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: