Même avec le mot clef extern ?
Pour contrôler l'ordre de désinitialisation, j'ai le souvenir qu'Alexandrescu avait donné un truc avec l'utilisation de la fonction atexit. Il faudrait que je regarde.
Version imprimable
On parle de déclaration....
Dans un source, si il ya "extern machin trucmuche", ca veut dire que trucmuche doit être importé d'une autre unité de compilation lors du "link".
Quand au "static" global... il suffit de faire le test dans un header, inclut dans plusieurs sources...
Chaque source aura sa propre instance de "test".Code:
1
2 static const std::string test="test de chaine";
Oui ! Je me souviens en avoir déjà fait les frais...
Mon cas était un peu différent donc je le poste ici au cas où quelqu'un rencontre le probleme à nouveau.
J'avais implémenté un simple singleton monothread de la sorte :
Jusque là pas de soucis, mais j'avais par erreur, inliné la méthode. Résultat : en débug tout allait bien mais en Release, comme mon singleton était appellé à des endroits différents, les instances étaient différentes à chaque endroit, plantage à la fermeture du programme évidement. J'ai mis longtemps avant de trouver que l'erreur venait de là.Code:
1
2
3
4
5
6 MonSingleton & MonSingleton::Instance() { static MonSingleton inst; return inst; }
Oui, sinon on aurait du mal avec les traits.
(réponse au message de NiamorH avec le Test::i & compagnie)