Singleton design pattern is a software design principle that is used to restrict the instantiation of a class to one object. This is useful when exactly one object is needed to coordinate actions across the system. For example, if you are using a logger, that writes logs to a file, you can use a singleton class to create such a logger. You can create a singleton class using the following code −

#include <iostream>

using namespace std;

class Singleton {
   public:
		static Singleton& getInstance() 
		{
			static std::unique_ptr<Singleton> instance(new Singleton());
			
			if (!instance)
	    instance = new Singleton;
	    return *instance;
		}

	 virtual ~Singleton&() = default;

   int getData() {
      return this -> data;
   }

   void setData(int data) {
      this -> data = data;
   }

	private:
	Singleton() = default;

	int data;
};

//Initialize pointer to zero so that it can be initialized in first call to getInstance
Singleton *Singleton::instance = 0;

int main(){
   Singleton& s = Singleton::getInstance();
   cout << s.getData() << endl;
   s->setData(100);
   cout << s.getData() << endl;
   return 0;
}

Explain C++ Singleton design pattern.