Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <thread>
- #include <mutex>
- using namespace std;
- mutex m;
- class SingletonClass
- {
- private:
- SingletonClass() { }
- SingletonClass(const SingletonClass& ) = delete ;
- SingletonClass(const SingletonClass&& )= delete ;
- //SingletonClass& operator= (const SingletonClass&) = delete ;
- //SingletonClass& operator= (const SingletonClass&&) = delete ;
- public:
- ~SingletonClass() ;
- //static SingletonClass * singletonObject;
- static unique_ptr<SingletonClass> singletonObject ;
- static SingletonClass* getInstance();
- void testObj()
- {
- cout << "Hello I am singleton : " << this << endl;
- }
- friend std::unique_ptr<SingletonClass> std::make_unique<SingletonClass>();
- };
- unique_ptr<SingletonClass>SingletonClass::singletonObject = nullptr;
- SingletonClass * SingletonClass::getInstance()
- {
- lock_guard<mutex> lock(m);
- if(!singletonObject)
- {
- singletonObject = make_unique<SingletonClass>();
- }
- return singletonObject.get();
- }
- int main()
- {
- SingletonClass * s = SingletonClass::getInstance();
- s -> testObj();
- SingletonClass * s1 = SingletonClass::getInstance();
- s1 -> testObj();
- SingletonClass * s2 = SingletonClass::getInstance();
- s2 -> testObj();
- SingletonClass * s3 = SingletonClass::getInstance();
- s3 -> testObj();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement