Что может привести к появлению нескольких экземпляров синглтона в DLL?C++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Что может привести к появлению нескольких экземпляров синглтона в DLL?

Сообщение Anonymous »


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

Для примера синглтона в грубой форме:

класс Синглтон { частный: статический синглтон* синглтон; публика: Сингелтон(); // ~Синглтон(); // Не показано для краткости. статический Сингелтон* getSingleton(); }; Синглтон* Синглтон::getSingleton() { если (!синглтон) { синглтон = новый синглтон; } вернуть синглтон; } Это скомпилировано в dll (я назову это SingletonAndOtherStuff.dll), которая предназначена для загрузки через LoadLibrary другими приложениями.

И вот тут я начинаю запутываться.

В отдельном основном приложении (я назову его app.exe) SingletonAndOtherStuff.dll загружается через LoadLibrary в двух местах. . В каких ситуациях может появиться несколько копий статической переменной m_instance?
[*]В случае с ромбовидным узором, приведет ли это к появлению двух синглтонов?:
app.exe / \ статическая/shared_lib статическая/shared_lib \ / SingletonAndOtherStuff.dll [*]Если бы у меня было несколько копий одной и той же библиотеки DLL на диске, привело бы это к появлению нескольких копий синглтона? app.exe / \ / \ статическая/shared_lib статическая/shared_lib | | SingletonAndOtherStuff.dll SingletonAndOtherStuff.dll [*]Если бы существовали другие комбинации или более длинные цепочки библиотек STATIC и SHARED между app.exe и SingletonAndOtherStuff.dll, может ли это привести к появлению нескольких экземпляров синглтона? Я просто ищу объяснение тому, что может привести к сбою этого шаблона в ситуации, когда dll загружается дважды.
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C++»