普通单例设计
代码语言:javascript复制class Singleton
{
public:
static Singleton* getInstance()
{
static Singleton instance;
return &instance;
}
~Singleton( );
private:
Singleton( );
};
上面的代码主要涉及到内存分配及析构、线程安全等等,但是设计不够完美。
进阶单例设计(推荐)
下面的代码基于 C 11
代码语言:javascript复制class Singleton
{
public:
static Singleton& getInstance()
{
static Singleton instance; // C 11 保证这是线程安全的
return instance;
}
private:
Singleton() {}
public:
Singleton(Singleton const&) = delete; // 《Effective Modern C 》提到,用 delete 更有益于编译器的错误提示
void operator=(Singleton const&) = delete;
};