Здравствуйте, KPavel, Вы писали:
KP>Всем привет!
KP>В книге Страуструпа ("Язык программирования С++", спец. издание, гл. 21.5.2) приводится способ однократной инициализации библиотеки на основе статического счетчика объектов. Да и здесь эта тема обсуждалась (здесьАвтор: Курилка
Дата: 12.02.02
).
KP>Допустим:
KP>[some.h]
KP>KP>class c_some
KP>{
KP> public:
KP> static int x;
KP> c_some(void);
KP>};
KP>
KP>[some.cpp]
KP>KP>#include "some.h"
KP>int c_some::x = 0;
KP>c_some::c_some(void)
KP>{
KP> // использование x
KP>}
KP>
KP>[test.cpp]
KP>KP>#include "some.h"
KP>c_some some;
KP>
KP>Вопрос — а где гарантия, что c_some::x будет инициализирован до создания первого объекта c_some?
KP>Что происходит, если первый объект c_some также создается глобально, или в конструкторе глобального объекта другого класса? Получается, что для того, чтобы этот прием работал, должен быть определенный порядок инициализации -
KP>int c_some::x = 0 (some.cpp) должно выполниться раньше, чем c_some some (test.cpp).
KP>Это что же, линкер должен соответствующим образом разместить данные в .cinit, или как вообще?
KP>
Если у тебя 2 статических или глобальных объекта в разных единицах компиляции то нет никакой гарантии в порядке создания объектов.
... << RSDN@Home 1.0 beta 6a >>