История изменений
Исправление 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
Если вдруг потом надо будет учитывать хромых собак, можно будет заменить статический метод на обычный.