單例模式是爲了讓類在整個進程全局只有一個實例對象,在多線程時有幾個點需要注意:
- 單例中成員方法在多線程訪問時是線程安全的
- 單例中如果有成員變量,成員方法對改成員變量是隻讀訪問,那也是線程安全的
- 單例中如果有成員變量,成員方法對改成員變量是既要讀取又要修改,那就需要對該方法進行多線程訪問加鎖考慮。
// 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;
}