Скажем, нам нужно иметь только один экземпляр некоторого класса в нашем проекте. Есть несколько способов сделать это.
Я хочу сравнить. Пожалуйста, просмотрите мое понимание.
1) Классический шаблон Singleton
2) Полностью статический класс (все методы и члены являются статическими).
Насколько я понимаю, различия следующие:
a) Порядок инициализации статических элементов в разных единицах не определен. Таким образом, инициализация полностью статических членов не может использовать какие-либо статические элементы/функции из других модулей. И singleton не имеет этой проблемы.
b) Нам нужно иметь дело с threading для getInstance() Singleton. Однако полностью статический класс не имеет этой проблемы.
c) Доступ к методам выглядит несколько иначе. Foo:: бар(); vs Foo:: getInstance() → bar(); Как правило, singleton может возвращать NULL, чтобы определить, что возникли некоторые проблемы со строительством объекта и статическим классом.
d) Определение класса выглядит немного неуклюжим с кучей статики для статического класса.
Я что-то пропустил?