单例模式
留神:单例模式会让程序变得难以测试,所以尽可能不要应用单实例模式。
保障一个类只有一个实例,并且提供了拜访该实例的全局拜访点。
线程平安的单例模式-C++11
Singleton.h
#pragma oncetemplate<typename T>class Singleton{public: static T& instance() { static T instance{ token{} }; return instance; } Singleton(const Singleton&) = delete; Singleton& operator= (const Singleton) = delete;protected: struct token {}; Singleton() {}};
Example
#include <Singleton.h>#include <iostream>class Test final : public Singleton<Test>{public: Test(token) { std::cout << "constructed" << std::endl; } ~Test() { std::cout << "destructed" << std::endl; } void use() const { std::cout << "in use" << std::endl; };};int main(){ // Test cannot_create; /* ERROR */ std::cout << "Entering main()" << std::endl; { auto const& t = Test::instance(); t.use(); } { auto const& t = Test::instance(); t.use(); } std::cout << "Leaving main()" << std::endl;}
隐患
如果单例类位于 dll
库中,是否还能保障惟一?
参考文献
1.https://codereview.stackexcha...
2.https://stackoverflow.com/que...
3.https://gameprogrammingpatter...
4.https://gpp.tkchu.me/singleto...
更新地址
C++11单例模式(线程平安)