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:
-
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 }; -
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 -
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.