C++单例模式 lock_guard+mutex+Garbo,绝对完整+清晰

class Singleton
{
public:
	static Singleton* getInstance()
	{
		if (instance == nullptr)
		{
			unique_lock<mutex> lg(mtx);
			if (instance == nullptr)
				instance = new Singleton;
		}
		return instance;
	}
private:
	Singleton() {};
	Singleton(const Singleton&) {};
	Singleton& operator=(const Singleton&) {};
	static Singleton *instance;
	static mutex mtx;
	class Garbo
	{
	public:
		~Garbo()
		{
			if (Singleton::instance)
			{
				delete Singleton::instance;
				Singleton::instance == nullptr;
			}
		}
	};
	static Garbo gar;
};
Singleton* Singleton::instance = nullptr;
mutex Singleton::mtx;
Singleton::Garbo Singleton::gar;

用到静态变量一定要初始化。

猜你喜欢

转载自blog.csdn.net/znzxc/article/details/82424827