Есть статическая либа, в которой, реализация некого 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 лет пишу, а так и не довелось столкнуться ни разу