Если у меня есть, например, следующая синглтонная конструкция, встроенная в заголовки:
class singleton_t
{
public:
static std::shared_ptr<singleton_t> instance()
{
static std::shared_ptr<singleton_t>
instance{new singleton_t};
return instance;
}
private:
singleton_t()
{
}
}
Они включены в несколько общих библиотек (DLL / SO) и исполняемых файлов, связанных динамически (используя LoadLibrary
/ dlopen
) можно ли рассчитывать на наличие одного экземпляра синглтона на модуль (по крайней мере, в Windows, Linux и OS X)?
Так, например:
file1.dll
код содержит один экземпляр Singleton,file2.dll
код содержит другой экземплярfile3.exe
содержит другой экземплярЕсли file3.exe
функция вызова (через GetProcAddress
) от file1.dll
Могу ли я рассчитывать на доступ file1.dll
Синглтонный экземпляр в этом теле функции?
Я знаю, что стандарт C ++ ничего не говорит о динамическом связывании, я ищу знания для конкретной платформы. Связь будет только динамической.
Задача ещё не решена.
Других решений пока нет …