LINUX.ORG.RU

История изменений

Исправление monk, (текущая версия) :

лишняя сущность - неймспейс.

А с моей точки зрения лишняя функциональность в классе: эмуляция неймспейса.

Например если надо счётчик для нескольких классов сделать, будешь им общего предка добавлять? Или если действительно надо считать именно объекты текущего класса. Через функцию в неймспейсе делается тривиально.

счетчик открыт извне и может быть модифицирован. в классе же он приватный.

С чего это? В неймспейсе он вообще только в .cpp присутствует. А вот в классе придётся эту особенность реализации в заголовок вытаскивать.

доступ к клаcсу во втором случае - A::A

Если нет конфликтов имён, первая команда using namespace. Вообще-то классы по неймспейсам рекомендуется распихивать чтобы случайно с именем из другого файла не пересечься.

тут все закрыто, а создание и уничтожение обьекта можно сделать только через специальные функции.

И позволяет писать в стиле

A* a = A::get_instance();
A* b = a.get_instance();
a.utilize(b);

Логичнее для фабрики сделать дружественную функцию вместо статической.

Статические методы имеют смысл, если они всё-таки используются как методы. Типа

a = new Dog();
cout << a.legs(); // всегда 4

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

Исходная версия monk, :

лишняя сущность - неймспейс.

А с моей точки зрения лишняя функции в классе: эмуляция неймспейса.

Например если надо счётчик для нескольких классов сделать, будешь им общего предка добавлять? Или если действительно надо считать именно объекты текущего класса. Через функцию в неймспейсе делается тривиально.

счетчик открыт извне и может быть модифицирован. в классе же он приватный.

С чего это? В неймспейсе он вообще только в .cpp присутствует. А вот в классе придётся эту особенность реализации в заголовок вытаскивать.

доступ к клаcсу во втором случае - A::A

Если нет конфликтов имён, первая команда using namespace. Вообще-то классы по неймспейсам рекомендуется распихивать чтобы случайно с именем из другого файла не пересечься.

тут все закрыто, а создание и уничтожение обьекта можно сделать только через специальные функции.

И позволяет писать в стиле

A* a = A::get_instance();
A* b = a.get_instance();
a.utilize(b);

Логичнее для фабрики сделать дружественную функцию вместо статической.

Статические методы имеют смысл, если они всё-таки используются как методы. Типа

a = new Dog();
cout << a.legs(); // всегда 4

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