ReactOS  0.4.12-dev-75-g00dd17e
stterm-test.cc
Go to the documentation of this file.
1 /*
2  * The conversation with Matti Rintala on STLport forum 2005-08-24:
3  *
4  * Do you mean ISO/IEC 14882 3.6.3 [basic.start.term]?
5  *
6  * Yes. "Destructors (12.4) for initialized objects of static storage duration
7  * (declared at block scope or at namespace scope) are called as a result
8  * of returning from main and as a result of calling exit (18.3). These objects
9  * are destroyed in the reverse order of the completion of their constructor
10  * or of the completion of their dynamic initialization."
11  *
12  * I found a confirmation on the web that gcc may not strictly conform
13  * to this behaviour in certains cases unless -fuse-cxa-atexit is used.
14  *
15  * Test below give (without -fuse-cxa-atexit)
16 
17 Init::Init()
18 Init::use_it
19 It ctor done <-- 0
20 Init::use_it done
21 Init ctor done <-- 1
22 Init2 ctor done <-- 2
23 It dtor done <-- 0
24 Init2 dtor done <-- 2
25 Init dtor done <-- 1
26 
27 
28  * but should:
29 
30 Init::Init()
31 Init::use_it
32 It ctor done <-- 0
33 Init::use_it done
34 Init ctor done <-- 1
35 Init2 ctor done <-- 2
36 Init2 dtor done <-- 2
37 Init dtor done <-- 1
38 It dtor done <-- 0
39 
40 
41  */
42 #include <stdio.h>
43 
44 using namespace std;
45 
46 class Init
47 {
48  public:
49  Init();
50  ~Init();
51 
52  static void use_it();
53 };
54 
55 class Init2
56 {
57  public:
58  Init2();
59  ~Init2();
60 
61 };
62 
63 static Init init;
64 static Init2 init2;
65 
66 class It
67 {
68  public:
69  It();
70  ~It();
71 };
72 
74 {
75  printf( "Init::Init()\n" );
76  use_it();
77  printf( "Init ctor done\n" );
78 }
79 
81 {
82  printf( "Init dtor done\n" );
83 }
84 
86 {
87  printf( "Init::use_it\n" );
88 
89  static It it;
90 
91  printf( "Init::use_it done\n" );
92 }
93 
95 {
96  printf( "Init2 ctor done\n" );
97 }
98 
100 {
101  printf( "Init2 dtor done\n" );
102 }
103 
105 {
106  printf( "It ctor done\n" );
107 }
108 
110 {
111  printf( "It dtor done\n" );
112 }
113 
114 int main()
115 {
116  return 0;
117 }
~Init()
Definition: stterm-test.cc:80
static Init init
Definition: stterm-test.cc:63
static Init2 init2
Definition: stterm-test.cc:64
It()
Definition: stterm-test.cc:104
BOOL Init(PUSERCONNECT UserCon)
Definition: dllmain.c:367
Definition: features.h:417
int main()
Definition: stterm-test.cc:114
~Init2()
Definition: stterm-test.cc:99
Init()
Definition: stterm-test.cc:73
static void use_it()
Definition: stterm-test.cc:85
~It()
Definition: stterm-test.cc:109
#define printf
Definition: config.h:203