不啰嗦,直接上代码~~~
#include<iostream>
#include<windows.h>
using namespace std;
HANDLE myLock =CreateMutex(NULL,TRUE,"myLock");//同步锁
//单线程环境
/*
class Singleton1{
private:
Singleton1(){
}
static Singleton1* instance;
public:
static Singleton1* getInstance(){
if(instance == NULL)
instance = new Singleton1();
return instance;
}
};
Singleton1* Singleton1::instance = NULL;
*/
//多线程环境:加同步锁
/*
class Singleton1{
private:
Singleton1(){
}
~Singleton1(){
if(instance)
delete instance;
}
static Singleton1* instance;
public:
static Singleton1* getInstance(){
if(myLock){
if(instance == NULL)
instance = new Singleton1();
}
return instance;
}
};
Singleton1* Singleton1::instance = NULL;
*/
//可行的解法:加同步锁前后两次判断实例是否已存在
class Singleton1{
private:
Singleton1(){
}
static Singleton1* instance;
class CGarbo //它的唯一工作就是在析构函数中删除CSingleton的实例
{
public:
~CGarbo()
{
if(Singleton1::instance)
delete Singleton1::instance;
}
};
static CGarbo Garbo; //定义一个静态成员变量,程序结束时,系统会自动调用它的析构函数
public:
static Singleton1* getInstance(){//加static才能通过类名::方法名形式调用
if(instance == NULL){
if(myLock){
if(instance == NULL)
instance = new Singleton1();
}
}
return instance;
}
};
Singleton1* Singleton1::instance = NULL;
int main(){
Singleton1* p1 = Singleton1::getInstance(); //出现异常原因,私有静态成员变量在使用前必须初始化,instance = NULL;
Singleton1* p2 = Singleton1::getInstance();
if(p1 == p2)
cout<<"equal"<<endl;
else
cout<<"not equal"<<endl;
return 0;
}