Глобальные перменные, singleton и DLL
От: jinjik  
Дата: 22.04.11 20:46
Оценка: :)
Есть статическая либа, в которой, реализация некого Singleton:
// SLib.h
Class Signle {
public:
    ~Single() { ... }
    static Single* Instalnce() { ... }
   ... methods ...
protected:
    Single() { ... }
private:
    static Single* inst;
};
// SLib.cpp
// тут реализация методов

Есть код исполняемого файла, в котором подключается данная статическая либа и используется этот сингелтон. Есть некие динамические либы, в которых используются данная статическая либа и этот сингельтон. Эти динамеческие либы используются которые непосредственно из этого же исполняемом файле и больше ни где.

Если я строку
Single* Single::inst = NULL;
помещаю в SLib.cpp, то у меня конструктор сингелтона вызывается при первом дерганье непосредственно из приложения, а также при каждом дерганье либ. Если я эту инициализацию помещаю в код приложения и в каждую из динамических библиотек (убираю из статик либы), то конструктор сингелтона дергается только один раз при первом обращении к сингелтону. То есть в либах его новая инициализация не происходит, используется тот, который инициализировался в основном EXE.
Где почитать по этому поводу, чтобы грамотно было расписано что к чему? гугль толком ничего не дал. Нашел только как другие тыкали пальцем в небо. MSDN — муть сплошлая, ничего не понял, что по этому поводу пишут.
Естественно, что Singleton — частный случай. Интересуют вообще глобальные переменные, статические глобальные, статические внутри одного cpp, статические в статических либах, динамических либах больше 10 лет пишу, а так и не довелось столкнуться ни разу
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.