...и отвечающий за создание/уничтожение объекта.
Что хочется:
1) Все операции создания/копирования/присвоения/уничтожения закрыты.
template <class T> /* необязательно, но не понятно, как без этого */
class singleton : boost::noncopyable
{
private:
singleton() { }
virtual ~singleton() { }
};
и некоторая функция instance(), которая при первом вызове инициализирует синглтон, и при всех вызовах возвращает объект класса, являющегося синглтоном.
2) Должна быть возможность создания полиморфных объектов.
class abstract : public singleton<abstract>
{
/* .... */
};
class concrete : public abstract
{
/* .... */
};
// как создать объект класса concrete?
Получается достичь или одно, или другое.
Некоторое решение есть в Александреску, но оно кажется малоприменимым к п.2.
Любые варианты приветствуются