Re: Инициализация статических членов
От: Yacha Россия  
Дата: 25.07.03 17:46
Оценка:
Здравствуйте, 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 >>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.