Автоматизировать настройку идентификаторов в соответствии с количеством экземпляров - PullRequest
1 голос
/ 13 марта 2020

У меня есть простой метод в моем классе, который устанавливает идентификаторы

void Instructor::setInstrID(const int newInstrID)
{
     instrID = newInstrID;
}

Я хочу, чтобы вместо ручной установки идентификатора я придумал способ, чтобы первый экземпляр Инструктора автоматически получал идентификатор 0 и когда второй инициализируется, он должен автоматически иметь Id = 1 и так далее. Теперь я не уверен, как это сделать.

Должно ли это быть в методе? Или это должно быть в моей функции main()? Как я могу проверить, есть ли существующие экземпляры? Я думал о создании вектора, но тогда это было бы в main(), и я действительно не хотел этого делать. Есть ли отводы?

1 Ответ

3 голосов
/ 13 марта 2020

Простым решением является добавление члена static, который подсчитывает количество существующих экземпляров.

class foo
{
private:
    // Next ID to assign
    static unsigned int counter;

    // This instance's ID
    unsigned int instrID = counter++;
};

unsigned int foo::counter = 0;

Вы можете столкнуться с проблемами, если создадите больше экземпляров, чем может представлять unsigned int , Все должно быть в порядке, если экземпляры уничтожаются примерно в том же порядке, в котором они были созданы.

Если вы хотите альтернативу, ориентированную на многопотоковое исполнение, вы можете использовать std::atomic<unsigned int>.

...