Вопрос

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

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

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

На данный момент я придумал:

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

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

Это было полезно?

Решение

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

Другие советы

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top