Викторина по C++ — синглтоны
-
09-06-2019 - |
Вопрос
Скоро выложу статью о мой блог, но сначала мне хотелось бы убедиться, что я ничего не пропустил.
Найдите пример, который я пропустил, и я процитирую вас в своем посте.
Тема — неудачные реализации Singleton:В каких случаях можно случайно получить несколько экземпляров синглтона?
На данный момент я придумал:
- Состояние гонки при первом вызове
instance()
- Включение в несколько DLL или DLL и исполняемый файл.
- Определение шаблона синглтона - фактически отдельные классы
Какие-нибудь другие способы, которые мне не хватает - возможно, с наследованием?
Решение
Если вы используете статическое поле экземпляра, которое вы инициализируете в своем файле cpp, вы можете получить несколько экземпляров (и даже худшее поведение), если инициализация некоторого статического/глобального поля попытается получить экземпляр вашего синглтона.Это связано с тем, что порядок статической инициализации в модулях компиляции не определен.
Другие советы
Наследование не должно быть проблемой, пока ctor является частным.
Однако, если вы не запретите конструктор копирования, пользователи могут [не]намеренно скопировать экземпляр Singleton.Частное наследование от повышение::некопируемый это самый простой способ предотвратить это.