Как создать класс только с одним экземпляром в C ++

0

Есть ли способ разрешить только один экземпляр класса в C++? Если есть, пожалуйста, прости меня. Спасибо.

  • 0
    Вы имеете в виду static вы можете сделать конструктор приватным и иметь метод newInstance() который возвращает только один экземпляр
  • 1
    Попробуйте шаблон синглтона.
Показать ещё 1 комментарий
Теги:
class

1 ответ

2

Это одноэлементный шаблон. Вы можете добиться этого с помощью общедоступного статического атрибута и частного конструктора:

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) {}
  • 0
    Копировать и присваивать, хотя ... В противном случае я могу сделать это: Singleton a = * Singleton :: singleton; Синглтон б = а;
  • 4
    Слишком сложно. И нет способа убрать это. Также его можно скопировать. Рассмотрим public static функцию, возвращающую ссылку на static экземпляр (преимущество: конструирование по требованию) или просто public static член. И не забудьте отключить копирование.
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню