Шаблон синглтона не гарантирует, что может быть создан максимум одного объекта, он создает один объект при инициализации программы и уничтожает его при завершении программы.
Используйте фабричную функцию для управления созданием объекта, представляющего ограниченный ресурс.
class limited {
private:
static int instance_count;
limited() { // users cannot directly call the constructor
++ instance_count;
}
limited( const limited & ); // do not implement so users cannot copy
public:
~limited() {
-- instance_count;
}
static limited make() { // this factory function must be used instead
if ( limited::instance_count >= 5 ) {
throw std::runtime_error( "some kind of overflow" );
}
return limited();
}
};