J'ai une classe (A) qui accède (indirectement via une méthode statique) à une variable statique (un conteneur STL) dans une autre classe (B) dans son constructeur et son destructeur. Un objet peut être global, des constantes globales, des membres statiques d'une autre classe, stockés dans d'autres classes (qui peuvent eux-mêmes avoir des instances globales ou statiques) ou, fondamentalement, n'importe où ailleurs, un objet C++ peut l'être.C++ Contrôle de l'ordre des destructeurs pour les objets globaux
Si un objet A est construit avant les membres statiques dans B ou détruit après les membres statiques dans B, il provoquera un plantage à un moment donné (généralement une violation d'accès). Existe-t-il un moyen de garantir que toutes les instances de la classe A (à l'exception de celles qui ont fui, étant par définition "perdues" et donc non détruites) sont construites après et détruites avant la variable statique de B?
J'ai vu quelques solutions pour faire une variable spécifique être construit/détruit avant/après un autre, mais pas un cas général de toutes les instances d'un type donné alors je ne sais pas comment aborder cela.
Il demande à propos de la destruction, pas de l'initialisation. –
@Neil: L'ordre de destruction est déterminé par l'ordre d'initialisation. – GManNickG
Donc je peux juste changer mon "conteneur Container statique" à "static Container & getContainer() {statique Conteneur Conteneur; retour conteneur;}" et il serait libéré après tout ce qui directement ou indirectement appelé getContainer dans son constructeur? Que se passe-t-il si une instance de A a été stockée dans un shared_ptr global plus tard dans le programme? –