История изменений
Исправление
pavlick,
(текущая версия)
:
Т.е. деструктор глобальной переменной(static storage duration) вызовется когда надо.
Процитированное говоришь лишь о том, что деструкторы будут вызваны в обратном порядке относительно завершения конструкторов. А порядок конструкторов гарантируется лишь в рамках одной единицы трансляции, а не между несколькими. Грубо говоря можно наступить в такое:
//1.cc
Dynamicly_initialized_object gv_obj;
//2.cc
extern Dynamicly_initialized_object gv_obj;
struct S {
S() {gv_obj.fn();}
~S() {gv_obj.fn();}
}gv_s;
Если возьмешь за правило писать подобное или создавать какие-нибудь глобальные vector<S>, то есть вероятность вляпаться. И вот ты говоришь: «посмотрите код», а я вижу std::deque<pkt_vec_t> и мне надо напрягаться, смотреть что это за pkt_vec_t, а можно ли его так заюзать, лучше вообще так не делать и вопросов не будет. Аналогично с использованием new (который ты заюзал дважды), надо максимально заменять на make_unique() + unique_ptr. Исходники так проще смотреть грепом - убедился в отсутсвии new, грепнул *_cast, включил воринг Wold-style-cast. А не разбираться там в головоломках и «крутой» архитектуре, конечно, если ты вообще хочешь чтобы кто-то на код смотрел, а не ради пиара всё.
Исходная версия
pavlick,
:
Т.е. деструктор глобальной переменной(static storage duration) вызовется когда надо.
Процитированное говоришь лишь о том, что деструкторы будут вызваны в обратном порядке относительно завершения конструкторов. А порядок конструкторов гарантируется лишь в рамках одной единицы трансляции, а не между несколькими. Грубо говоря можно наступить в такое:
//1.cc
Dynamicly_initialized_object gv_obj;
//2.cc
extern Dynamicly_initialized_object gv_obj;
struct S {
S() {gv_obj.fn();}
~S() {gv_obj.fn();}
}gv_s;
Если возьмешь за правило писать подобное или создавать какие-нибудь глобальные vector<S>, то есть вероятность вляпаться. И вот ты говоришь: «посмотрите код», а я вижу std::deque<pkt_vec_t> и мне надо напрягаться, смотреть что это за pkt_vec_t, а можно ли его так заюзать, лучше вообще так не делать и вопросов не будет. Аналогично с использованием new (который ты заюзал дважды), надо максимально заменять на make_unique() + unique_ptr. Исходники так проще смотреть грепом - убедился в отсутсвии new, грепнул *_cast, включил воринг Wold-style-cast. А не разбираться там в головоломках и «крутой» архитектуре.