Sobes.tech
Middle+

How can you limit the number of class instances in C++?

sobes.tech AI

Answer from AI

There are several ways to limit the number of class instances:

  1. Singleton: Ensures only one instance of the class is created.

    class Singleton {
    public:
        static Singleton& getInstance() {
            static Singleton instance; // Guaranteed creation of a single instance upon first call
            return instance;
        }
    
        // Disable copying and assignment
        Singleton(const Singleton&) = delete;
        Singleton& operator=(const Singleton&) = delete;
    
    private:
        Singleton() {} // Private constructor
    
        // Additional class members
    };
    
  2. Instance counter: Maintain a static counter within the class.

    class LimitedInstances {
    public:
        LimitedInstances() {
            if (instanceCount_ >= MAX_INSTANCES) {
                throw std::runtime_error("Maximum number of instances reached.");
            }
            instanceCount_++;
        }
    
        ~LimitedInstances() {
            instanceCount_--;
        }
    
        // Disable copying and assignment
        LimitedInstances(const LimitedInstances&) = delete;
        LimitedInstances& operator=(const LimitedInstances&) = delete;
    
    private:
        static const int MAX_INSTANCES = 3; // Maximum number of instances
        static int instanceCount_;
    };
    
    int LimitedInstances::instanceCount_ = 0; // Static variable initialization
    
  3. Factory (Factory Method): Manage instance creation through a static method.

    class LimitedInstancesFactory {
    public:
        static LimitedInstancesFactory* createInstance() {
            if (instanceCount_ >= MAX_INSTANCES) {
                return nullptr; // Or throw an exception
            }
            instanceCount_++;
            return new LimitedInstancesFactory(); // Create an instance
        }
    
        ~LimitedInstancesFactory() {
            instanceCount_--;
        }
    
        // Disable copying and assignment
        LimitedInstancesFactory(const LimitedInstancesFactory&) = delete;
        LimitedInstancesFactory& operator=(const LimitedInstancesFactory&) = delete;
    
    private:
        LimitedInstancesFactory() {} // Private constructor
    
        static const int MAX_INSTANCES = 2; // Maximum number of instances
        static int instanceCount_;
    };
    
    int LimitedInstancesFactory::instanceCount_ = 0; // Static variable initialization
    

Each approach has its features and is applicable depending on the required scenario. Singleton for a single instance, counter and factory for a specified number.