8.9. Creating a Singleton Class
Problem
You have a class that must only ever be instantiated once, and you need to provide a way for clients to access that class in such a way that the same, single object is returned each time. This is commonly referred to as a singleton pattern, or a singleton class.
Solution
Create a static
member that is a pointer to the
current class, restrict the use of constructors to create the class by making them
private
, and provide a public static
member function that clients can use to access the
single, static instance. Example 8-9
demonstrates how to do this.
Example 8-9. Creating a singleton class
#include <iostream> using namespace std; class Singleton { public: // This is how clients can access the single instance static Singleton* getInstance(); void setValue(int val) {value_ = val;} int getValue() {return(value_);} protected: int value_; private: static Singleton* inst_; // The one, single instance Singleton() : value_(0) {} // private constructor Singleton(const Singleton&); Singleton& operator=(const Singleton&); }; // Define the static Singleton pointer Singleton* Singleton::inst_ = NULL; Singleton* Singleton::getInstance() { if (inst_ == NULL) { inst_ = new Singleton(); } return(inst_); } int main() { Singleton* p1 = Singleton::getInstance(); p1->setValue(10); Singleton* p2 = Singleton::getInstance(); cout << "Value = " << p2->getValue() << '\n'; }
Discussion
There are many situations where you want at most one instance of a class—this is why ...
Get C++ Cookbook now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.