Здравствуйте,
В проекте понадобился маленький класс, объект которого должен существовать в единственном экземпляре. Кроме того, он должен быть доступен из любого места программы. В качестве альтернативы синглтону был предложен namespace. Думаю из кода будет понятна общая идея:
// manager.h
namespace Manager
{
void f();
void g();
}
// manager.cpp
#include "manager.h"
namespace
{
// keep here Manager "instance" variables state
int managerData_ = 0;
...
}
void Manager::f()
{
++managerData_;
}
void Manager::g()
{
...
}
Т.е. определяем интерфейс в хедере, а все переменные кладем в cpp в unnamed-namespace. Таким образом гарантируется существование лишь одного экземпляра. Конечно, это не ООП подход, но у него есть свои преимущества:
1) Простота. Не требуется абсолютно никаких манипуляций с тем, чтобы сделать класс синглтоном
2) Инкапсуляция: пользователю виден лишь интерфейс класса, скрыты даже переменные класса.
Наследование от класса не требуется. Хочется узнать, плоха ли такая идея, и если да, то чем?
(Не из идеологических соображений ООП, а с точки зрения использования)