C++设计模式之单件模式

76 阅读1分钟
/*
单件模式
*/

#include <iostream>
#include <thread>
#include <mutex>


class Singleton {
public:
//这是实现1
# if 0
	static Singleton& getInstance() {
		static Singleton instance;
		return instance;
	}
#endif

//这是实现2
	static Singleton* getInstance() {
		std::lock_guard<std::mutex> lck(mtx);
		if (nullptr == instance) {
			instance = new Singleton();
		}
		return instance;
	}

	void printTest() {
		std::cout << "Singleton..." << std::endl;
	}

private:
	//私有化构造函数,防止实例化
	Singleton() {}
	//删除复制构造函数和赋值运算符
	Singleton(const Singleton&) = delete;
	Singleton& operator=(const Singleton&) = delete;

	static std::mutex mtx;
	static Singleton* instance;
};

Singleton* Singleton::instance = nullptr;
std::mutex Singleton::mtx;

int main() {

	Singleton::getInstance()->printTest();
	return 0;
}