Est-ce que C ++ appelle des destructeurs pour les variables globales et statiques de classe?

De mon exemple de programme, il semble qu’il appelle les destructeurs dans les deux cas. À quel moment appelle-t-on les destructeurs pour les variables globales et les variables statiques, car elles doivent être allouées dans la section de données de la stack de programmes?

D’après le § 3.6.3 du standard C ++ 03:

Les destructeurs (12.4) pour les objects initialisés de durée de stockage statique (déclarés dans la scope du bloc ou dans l’espace de nommage) sont appelés suite au retour de main et à l’appel de exit (18.3). Ces objects sont détruits dans l’ordre inverse de l’achèvement de leur constructeur ou de l’achèvement de leur initialisation dynamic. Si un object est initialisé de manière statique, l’object est détruit dans le même ordre que si l’object était initialisé dynamicment. Pour un object de type tableau ou classe, tous les sous-objects de cet object sont détruits avant la destruction de tout object local dont la durée de stockage statique est initialisée lors de la construction des sous-objects.

De plus, le § 9.4.2 7 stipule:

Les membres de données statiques sont initialisés et détruits exactement comme des objects non locaux (3.6.2, 3.6.3).

Cependant, si un destructeur n’a aucun comportement observable, il ne peut pas être appelé. Terry Mahaffey détaille ceci dans sa réponse à “Est-ce qu’un destructeur de C ++ est garanti pour ne pas être appelé jusqu’à la fin du bloc?” .

Quelque part après “main”

(vous ne pouvez pas savoir ou compter sur l’ordre exact dans lequel ils sont appelés)