2010-11-28 9 views
5

Можно создать дубликат:
C++ singleton vs completely static objectC++ Singleton Vs статические методы

Привет,

почему я должен предпочесть синглтона над статическими методами класса.

MoneyPrinter::addJob(PrinterJob &job); 
or 
    MoneyPrinter::getInstance().addJob(PrinterJob &job); 

Это только вопрос стиля? Что вы используете? Зачем?

ps. Я знаю, что сиглетоны по умолчанию не являются потокобезопасными (первая инициализация).

+0

Кто сказал, что вам следует их отдать? – 2010-11-28 22:11:38

+0

Я бы согласился с дубликатом, за исключением того, что на него никогда не отвечали. – 2010-11-28 22:19:23

+0

Я думаю, у вас есть опечатка для примера синглтона: MoneyPrinter :: GetInstance(). AddJob (PrinterJob &job); – T33C 2010-11-28 22:33:28

ответ

2

одноплодной дает вам контроль над когда класс конкретизируется и, как DeadMG указывает если вы хотите создать его экземпляр. Статический класс менее управляем и создается при вызове main.

Последовательность, в которой классы создаются, иногда может иметь решающее значение, когда одноэлементность зависит от какого-либо другого класса или ресурса, который не доступен до вызова main.

Как вы упомянули, если вы вызываете однотонный из нескольких потоков, вам необходимо убедиться, что вы использовали поточный безопасный синглтон. Скотт Майер (из Effective C++), например, не является потокобезопасным.

3

Общее правило одиночных игр - если вы должны спросить, не используйте его. Это верно для любого изменчивого в мире состояния.

5

почему я должен предпочесть синглтон над статическими методами класса

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

Что вы используете? Зачем?

Если нет состояния, то статический метод, потому что это самый простой.

В противном случае одиночный элемент, желательно статически инициализированный (вместо инициализации по принципу «точно в срок» или во время выполнения).

2

Было бы сложнее реорганизовать Singleton-ness просто из-за синтаксиса, используемого при использовании статических функций-членов. Есть одна причина.

Смежные вопросы