Синглтон C ++ и полностью статический объект

Допустим, нам нужен только один экземпляр некоторого класса в нашем проекте. Есть несколько способов сделать это.

Я хочу сравнить. Пожалуйста, ознакомьтесь с моим пониманием.

1) Классический шаблон Singleton

2) Полностью статический класс (все методы и члены статичны).


Насколько я понимаю, различия заключаются в следующем:

a) Порядок инициализации статических элементов в разных модулях не определено. Таким образом, инициализация полностью статических членов не может использовать какие-либо статические члены / функции из других модулей. И синглтон не имеет этой проблемы.

б) Нам нужно иметь дело с потоками для getInstance () синглтона. Однако полностью статический класс не имеет этой проблемы.

c) Доступ к методам выглядит немного иначе. Foo :: bar (); vs Foo :: getInstance () -> bar (); Как правило, singleton может возвращать NULL, чтобы определить, что были некоторые проблемы с построением объекта, а статический класс не может.

d) Определение класса выглядит немного неуклюжим с кучей статики для статического класса.

Я могу что-то пропустил?

34
задан SCFrench 1 October 2010 в 19:32
поделиться