Статические переменные внутри функции и динамическая связь - PullRequest
0 голосов
/ 07 декабря 2018

Если у меня есть, например, следующая одноэлементная конструкция, встроенная в заголовки:

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 ++ ничего не говорит о динамическом связывании, я ищу знания для платформы,Связь будет только динамической.

...