Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Могу ли я создать второй экземпляр синглтона в DLL?

Автор вопроса: CuriousGeorgeОтветов: 1

У меня есть статическая библиотека, содержащая синглтоны. Мне нужно загрузить отдельный экземпляр этих синглетонов в том же процессе для целей тестирования.

Поэтому я создал DLL, которая связывает ту же статическую библиотеку, а затем основной процесс загружает эту DLL.

Как только DLL пытается загрузиться, я получаю нарушения доступа при попытке доступа к указателям статических экземпляров в синглтонах.

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

Возможно ли то, что я пытаюсь сделать?

  • Можете ли вы показать соответствующий код, который дает нарушения прав доступа? Как скоро вы имеете в виду, когда говорите, как только DLL пытается загрузиться? paddy 19.09.2012
  • Марк был прав, см. комментарии под его постом. CuriousGeorge 19.09.2012

c++static-librariessingletondll

Ответы

Ответ 1 · рейтинг 3 · Mark Ransom

В большинстве случаев синглтон на самом деле должен быть только один - ваш запрос необычен.

Я знаю, что связывание статической библиотеки с DLL может привести к множеству экземпляров статических переменных, потому что я видел это сам. Каждая DLL или EXE получает свою собственную копию статической библиотеки через компоновщик и, следовательно, свою собственную копию статических переменных.

Нарушения прав доступа могут возникать из-за проблем с порядком инициализации. Лучший способ контролировать это - убедиться, что статические переменные находятся внутри функции, которая инициализирует их вовремя, а не в глобальных переменных.

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы