C++单例模式
2016-07-11 22:53
387 查看
单例模式:
一个类,一个程序里面只有一个实例.
注意delete要调用对象的析构函数.
实现一:
在第一次获取实例的时候才创建:
实现二:
在大数据时,加解锁会成为瓶颈.先创建一个实例(不管用没用),增加了内存,但是减少了线程的阻塞
注:当想要Singleton能够被继承时,将构造和析构改成protect
一个类,一个程序里面只有一个实例.
注意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
相关文章推荐
- C++11 智能指针之 std::shared_ptr 初级学习
- HDU-1061-Rightmost Digit
- [Reprint]c++中typename和class的区别介绍
- C++ 类模板三(类模版中的static关键字)
- C语言培训_007
- 【数字图像】BMP位图的头文件
- 【c++程序】全局变量和局部变量汇总
- C语言培训_006
- C++ 类模板二(类模版与友元函数)
- 《机器学习实战》第5章逻辑回归算法的C++实现方式
- c++代码习惯
- 初步了解c++的文件输入输出
- 大话设计模式———c++反射机制实现
- [c/c++]指针(2)
- HDU-2069-Coin Change
- [Reprint] C++函数模板与类模板实例解析
- 提高项目30.6-删除字符串前面的空格
- C++中union的使用
- C++中union的使用
- C语言Printf()&scanf() 学习笔记