单例模式的2种写法

// sample 1
class Singleton {
public:
	static Singleton& getInstance() {
		static Singleton instance;
		return instance;
	}
	
	Singleton(const Singleton& src) = delete;
	Singleton& operator=(const Singleton& src) = delete;

	void init() {
		...// init resource
	}

private:
	Singleton() {}
};

// sample 2
class Singleton {
public:
	static const Singleton* getInstance() {
		return instance;
	}
	
	Singleton(const Singleton& src) = delete;
	Singleton& operator=(const Singleton& src) = delete;

private:
	Singleton() {}
	static const Singleton* instance;

};

const Singleton* Singleton::instance = new Singleton;

这两者在main()开始之前已经被初始化了,不用考虑多线程的问题。

发布了199 篇原创文章 · 获赞 149 · 访问量 38万+

猜你喜欢

转载自blog.csdn.net/zgaoq/article/details/103541512