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 73 Init::Init() 74 { 75 printf( "Init::Init()\n" ); 76 use_it(); 77 printf( "Init ctor done\n" ); 78 } 79 80 Init::~Init() 81 { 82 printf( "Init dtor done\n" ); 83 } 84 85 void Init::use_it() 86 { 87 printf( "Init::use_it\n" ); 88 89 static It it; 90 91 printf( "Init::use_it done\n" ); 92 } 93 94 Init2::Init2() 95 { 96 printf( "Init2 ctor done\n" ); 97 } 98 99 Init2::~Init2() 100 { 101 printf( "Init2 dtor done\n" ); 102 } 103 104 It::It() 105 { 106 printf( "It ctor done\n" ); 107 } 108 109 It::~It() 110 { 111 printf( "It dtor done\n" ); 112 } 113 114 int main() 115 { 116 return 0; 117 } 118