ReactOS 0.4.16-dev-340-g0540c21
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
17Init::Init()
18Init::use_it
19It ctor done <-- 0
20Init::use_it done
21Init ctor done <-- 1
22Init2 ctor done <-- 2
23It dtor done <-- 0
24Init2 dtor done <-- 2
25Init dtor done <-- 1
26
27
28 * but should:
29
30Init::Init()
31Init::use_it
32It ctor done <-- 0
33Init::use_it done
34Init ctor done <-- 1
35Init2 ctor done <-- 2
36Init2 dtor done <-- 2
37Init dtor done <-- 1
38It dtor done <-- 0
39
40
41 */
42#include <stdio.h>
43
44using namespace std;
45
46class Init
47{
48 public:
49 Init();
50 ~Init();
51
52 static void use_it();
53};
54
55class Init2
56{
57 public:
58 Init2();
59 ~Init2();
60
61};
62
63static Init init;
64static Init2 init2;
65
66class 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
114int main()
115{
116 return 0;
117}
~Init2()
Definition: stterm-test.cc:99
Init()
Definition: stterm-test.cc:73
static void use_it()
Definition: stterm-test.cc:85
~Init()
Definition: stterm-test.cc:80
It()
Definition: stterm-test.cc:104
~It()
Definition: stterm-test.cc:109
#define printf
Definition: freeldr.h:97
Definition: features.h:417
static Init init
Definition: stterm-test.cc:63
static Init2 init2
Definition: stterm-test.cc:64
int main()
Definition: stterm-test.cc:114