C ++ Quiz - Singletons - PullRequest
       14

C ++ Quiz - Singletons

0 голосов
/ 13 сентября 2008

Я скоро опубликую статью на моем блоге , но я хотел бы убедиться, что сначала я ничего не пропустил.

Найдите пример, который я пропустил, и я процитирую вас в моем сообщении.

Тема с ошибками реализации Singleton: в каких случаях вы можете случайно получить несколько экземпляров синглтона?

Пока что я придумал:

  • Состояние гонки при первом вызове на instance()
  • Включение в несколько DLL или DLL и исполняемый файл
  • Шаблон определения синглтона - фактически отдельные классы

Есть ли другие способы, по которым я скучаю - возможно, по наследству?

Ответы [ 2 ]

3 голосов
/ 13 сентября 2008

Если вы используете поле статического экземпляра, которое вы инициализируете в вашем файле cpp, вы можете получить несколько экземпляров (и даже худшее поведение), если инициализация некоторого статического / глобального пытается получить экземпляр вашего синглтона. Это связано с тем, что порядок статической инициализации в единицах компиляции не определен.

1 голос
/ 13 сентября 2008

Наследование не должно быть проблемой, пока ctor является частным.

Однако, если вы не запретите конструктор копирования, пользователи могут [не] намеренно копировать экземпляр синглтона. Частное наследование от boost :: noncopyable - самый простой способ предотвратить это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...