Существует несколько способов, основные:
-
Использование статической переменной-счетчика:
- Завести статическую переменную типа
int для отслеживания количества созданных экземпляров.
- Увеличивать счетчик в конструкторе.
- Уменьшать счетчик в деструкторе.
- В конструкторе проверять значение счетчика и, если лимит превышен, выбрасывать исключение или предпринимать другие действия.
- Сделать конструктор приватным или защищенным, а создание экземпляра осуществлять через статическую фабричную функцию, которая выполняет проверку.
- Запретить копирование и перемещение.
cpp
-
Использование паттерна Singleton с модификацией:
- Обычно Singleton гарантирует один экземпляр. Для ограничения количества экземпляров, можно модифицировать его, управляя доступом к созданию через статическую функцию и отслеживая созданные объекты в приватном статическом контейнере (например,
std::vector или std::list).
cpp
Оба подхода требуют careful resource management, особенно при использовании new. Паттерн Singleton с модификацией может быть более сложным в реализации деструкции объектов, особенно если их жизненный цикл не совпадает с завершением программы.
Выбор метода зависит от конкретных требований и сложности системы. Подход с статическим счетчиком в целом проще для понимания и реализации.