Есть ли способ разрешить только один экземпляр класса в C++? Если есть, пожалуйста, прости меня. Спасибо.
Это одноэлементный шаблон. Вы можете добиться этого с помощью общедоступного статического атрибута и частного конструктора:
class Singleton {
public:
static Singleton * const singleton;
private:
Singleton(void) {}
};
Singleton * const Singleton::singleton = new Singleton();
Редактировать: Хорошая точка от Дэна Уоткинса; Если вы действительно хотите быть драконовским, вы можете запретить копирование и назначение, также явно объявляя эти методы приватными:
private:
Singleton(void) {}
Singleton(Singleton& other) {}
Singleton& operator=(Singleton& other) {}
public static
функцию, возвращающую ссылку на static
экземпляр (преимущество: конструирование по требованию) или просто public static
член. И не забудьте отключить копирование.
static
вы можете сделать конструктор приватным и иметь методnewInstance()
который возвращает только один экземпляр