您的位置:首页 > 编程语言 > C语言/C++

C++单例模式

2016-07-11 22:53 387 查看
单例模式:

一个类,一个程序里面只有一个实例.

注意delete要调用对象的析构函数.

实现一:

在第一次获取实例的时候才创建:

#include<iostream>

using namespace std;

class Singleton {
public:
static Singleton* GetInstace();
private:
Singleton() {}
static Singleton *pInstance;
class CGarbo {
public:
~CGarbo() {
if (pInstance)
delete pInstance;
}
};
static CGarbo Garbo;
};
Singleton* Singleton::pInstance = NULL;
Singleton* Singleton::GetInstace() {
if (pInstance == NULL){
lock();
if (pInstance == NULL){
pInstance = new Singleton();
}
unlock();
}
return pInstance;
}


实现二:

在大数据时,加解锁会成为瓶颈.先创建一个实例(不管用没用),增加了内存,但是减少了线程的阻塞

#include<iostream>

using namespace std;

class Singleton {
public:
static Singleton* GetInstace();
private:
Singleton() {}
static Singleton *pInstance;
class CGarbo {
public:
~CGarbo() {
if (pInstance)
delete pInstance;
}
};
static CGarbo Garbo;
};
Singleton* Singleton::pInstance = new Singleton();
Singleton* Singleton::GetInstace() {
return pInstance;
}


注:当想要Singleton能够被继承时,将构造和析构改成protect
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: