Если у меня есть, например, следующая одноэлементная конструкция, встроенная в заголовки:
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
код содержит один экземпляр, file2.dll
код содержит другой экземпляр file3.exe
содержит другой экземпляр
Если file3.exe
вызывает функцию (через GetProcAddress
) из file1.dll
, могу ли я рассчитывать на доступ к одноэлементному экземпляру file1.dll
в этом теле функции?
Я знаю, что стандарт C ++ ничего не говорит о динамическом связывании, я ищу знания для платформы,Связь будет только динамической.