LINUX.ORG.RU

История изменений

Исправление pavlick, (текущая версия) :

Ну и в качестве небольшого теста. Погонял под отладчиком, компилировал с -O2.

struct S {
   int i;
   ~S() {}
};
S &g1_my() {
   static S s{}; return s;
}
S &g2_my() {
   static S s{}; return s;
}
int main() {
#ifdef FIRST
   g1_my(); g2_my();
#else
   g2_my(); g1_my();
#endif
   return 0;
}
Порядок вызова деструкторов (не заоптимизировались):
#defind FIRST
//g2_my()::s
//g1_my()::s
#defind SECOND
//g1_my()::s
//g2_my()::s

Исходная версия pavlick, :

Ну и в качестве небольшого теста. Погонял под отладчиком, компилировал с -O2.

struct S {
   int i;
   ~S() {}
};
S &g1_my() {
   static S s; return s;
}
S &g2_my() {
   static S s; return s;
}
int main() {
#ifdef FIRST
   g1_my(); g2_my();
#else
   g2_my(); g1_my();
#endif
   return 0;
}
Порядок вызова деструкторов (не заоптимизировались):
#defind FIRST
//g2_my()::s
//g1_my()::s
#defind SECOND
//g1_my()::s
//g2_my()::s