单例模式是为了让类在整个进程全局只有一个实例对象,在多线程时有几个点需要注意:
- 单例中成员方法在多线程访问时是线程安全的
- 单例中如果有成员变量,成员方法对改成员变量是只读访问,那也是线程安全的
- 单例中如果有成员变量,成员方法对改成员变量是既要读取又要修改,那就需要对该方法进行多线程访问加锁考虑。
// SingleTon.h
class SingleTon{
public:
static SingleTon& GetInstance();
private:
SingleTon() = default;
SingleTon(const SingleTon& other) = delete;
SingleTon& operator=(const SingleTon&) = delete;
~SingleTon();
static SingleToninstance;
};
// SingleTon.cpp
SingleTon& SingleTon::GetInstance()
{
static SingleTon instance;
return instance;
}