C++单例模式代码记录:
单例模式:一个类的对象只允许创建一个
#include <iostream>
#include <thread>
#include <mutex>
#include <condition_variable>
using namespace std;
class SignleTon{
public:
void getStr(){ cout << "I Love China!" << endl;} // 测试函数
int geti(){return 1;} // 测试函数
static SignleTon* getInstance() { // 获取对象指针
if (!m_instance){ // 双重锁定 | 双重检查 -> 提高效率
std::unique_lock<std::mutex> lck; //智能锁
if (!m_instance){
m_instance = new SignleTon;
static SigHuishou sh;
}
}
return m_instance;
}
// 手动回收new出来的SignleTon对象,
// 程序执行完的时候,操作系统自动释放SigHuishou sh对象,
// 调用析构函数的时候,释放m_instance
class SigHuishou{
public:
~SigHuishou(){
if (SignleTon::m_instance){
delete SignleTon::m_instance;
SignleTon::m_instance = nullptr;
}
}
};
private:
SignleTon(){} // 私有构造函数
static SignleTon* m_instance; //静态对象指针
};
SignleTon *SignleTon::m_instance = nullptr; // 对静态指针初始化
int main(){
SignleTon* sig = SignleTon::getInstance();
sig->getStr();
cout << sig->geti() << endl;
return 0;
}