j'ai le code suivant:
en gros:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 #include <cstdio> struct A { A() { printf("A()\n"); } ~A() { printf("~A()\n"); } static A& getA() { static A a; return a; } }; struct B { B() { A::getA(); printf("B()\n"); } ~B() { printf("~B()\n"); } }; static B b; int main(int argc, const char *argv[]) { return 0; }
b est une variable globale statique, a est aussi une variable globale (type singleton, si on veut) qui sera initialisée "sur demande" lors du premier appel
Or, le constructeur de B depend de A; donc on devrait avoir le résultat suivant:
et c'est ce que j'obtiens sous Windows, sous linux, sous toutes les plates-formes du monde... sauf sous Solaris. Sous solaris j'obtiens le résultat:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 A() B() ~B() ~A()
les variables dynamiques sont toutes déinitialisées avant les variables statiques, bien qu'elles aient été construites avant.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 A() B() ~A() ~B()
Ca marche nickel sur tous les compilateurs et même sur sunCC sur solaris; mais ca m'arrive avec gcc sur solaris.
Quelqu'un a plus d'infos sur ce problème??
Partager