Как ограничить класс по количеству объектов, которые будут созданы в C ++?

0

Я просто пишу пример кода, чтобы создать только 5 объектов из класса. Я написал свой код, как это

#include <iostream>

using namespace std;

class SingletonGeneric
{
private:
    static int Count;
    static SingletonGeneric *single;
    SingletonGeneric()
    {
        //private constructor
    }
public:
    static SingletonGeneric* getInstance();
    void method();
    ~SingletonGeneric()
    {
        Count -- ;
    }
};

int SingletonGeneric::Count = 0;
SingletonGeneric* SingletonGeneric::single = NULL;
SingletonGeneric* SingletonGeneric::getInstance()
{
    if( Count >= 0 && Count < 6)
    {
        single = new SingletonGeneric();
        Count = ++;
        return single;
    }
    else
    {
        return single;
    }
}

void SingletonGeneric::method()
{
    cout << "Method of the SingletonGeneric class" << endl;
}
int main()
{
    SingletonGeneric *sc1,*sc2;
    sc1 = SingletonGeneric::getInstance();
    sc1->method();
    sc2 = SingletonGeneric::getInstance();
    sc2->method();

    return 0;
}

но я не получаю ожидаемого результата. поэтому, пожалуйста, скажите мне, как мне изменить код. Или, если есть какой-либо другой простой способ сделать это, пожалуйста, дайте мне знать.

  • 5
    быстрый ответ Count = ++; это синтаксическая ошибка
  • 0
    Как вы это тестируете? И каковы ваши ожидания?
Показать ещё 1 комментарий
Теги:
singleton
static-methods
static-members

1 ответ

0
Лучший ответ
#include <iostream>

using namespace std;

class SingletonGeneric
{
private:
    static int Count;
    static SingletonGeneric *single;
    SingletonGeneric()
    {
        //private constructor
    }
public:
    static SingletonGeneric* getInstance();
    void method();
    ~SingletonGeneric()
    {
        Count -- ;
    }
};

int SingletonGeneric::Count = 0;
SingletonGeneric* SingletonGeneric::single = NULL;
SingletonGeneric* SingletonGeneric::getInstance()
{
    if( Count >= 0 && Count < 5) // should be 5 not 6
    {
        single = new SingletonGeneric();
        Count++;
        return single;
    }
    else
    {
        return NULL;// not the old single
    }
}

void SingletonGeneric::method()
{
    cout << "Method of the SingletonGeneric class" << endl;
}
int main()
{
    SingletonGeneric *sc1,*sc2, *sc3, *sc4, *sc5, *sc6;
    sc1 = SingletonGeneric::getInstance();
    sc1->method();
    sc2 = SingletonGeneric::getInstance();
    sc2->method();
    sc3 = SingletonGeneric::getInstance();
    sc3->method();
    sc4 = SingletonGeneric::getInstance();
    sc4->method();
    sc5 = SingletonGeneric::getInstance();
    sc5->method();
    sc6 = SingletonGeneric::getInstance();
    if (sc6 != NULL) {
        sc5->method();
    } else {
        cout << "only have to create 5 objects" << endl;
    }

    return 0;
}
  • 0
    спасибо Янчонг. Есть ли другой способ?
  • 0
    Обычным способом может быть установка count ++ в вашем конструкторе SingletonGeneric и установка количества в вашем деструкторе SingletonGeneric. Также проверьте счетчик <5 в SingletonGeneric contructor, если count> = 5, просто сгенерируйте исключение.

Ещё вопросы

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