再看一个精妙的单例
来源:互联网 发布:php密码破解 编辑:程序博客网 时间:2024/05/16 01:45
之前, 在http://blog.csdn.net/stpeace/article/details/68953253中, 我们一起看到过精妙的单例, 搬移过来看看:
#include <iostream>using namespace std;class A{public:int x;A(){printf("A constrct\n");}~A(){printf("A destruct\n");}};template <typename T>class CSingleton {public:static T* getInstance();};template <typename T>T* CSingleton<T>::getInstance(){static T instance;return &instance;}int main() {CSingleton<A>::getInstance()->x = 100;cout << CSingleton<A>::getInstance()->x << endl;cout << CSingleton<A>::getInstance()->x << endl;cout << CSingleton<A>::getInstance()->x << endl;return 0;}结果:
A constrct
100
100
100
A destruct
在上述单例中, 用的时候, CSingleton<A>让人时刻知道这是个单例, 感觉爽。 最近, 我遇到了上述单例的变形, 来看看:
#include <iostream>using namespace std;template <typename T>class CSingleton {public:static T* getInstance();};template <typename T>T* CSingleton<T>::getInstance(){static T instance;return &instance;}class A : public CSingleton<A>{public:int x;A(){printf("A constrct\n");}~A(){printf("A destruct\n");}};int main() {A::getInstance()->x = 100;cout << A::getInstance()->x << endl;cout << A::getInstance()->x << endl;cout << A::getInstance()->x << endl;return 0;}结果:
A constrct
100
100
100
A destruct
此时, 在使用A的时候, 对单例的感觉不那么强烈, 但使用起来很简单。 有点意思。
阅读全文
1 0
- 再看一个精妙的单例
- 一个精妙单例CSingleton的赏析------逐渐抽象为单例CSingleton模板
- 再看单例模式
- 单例模式再看
- 再看一个内存对齐的例子
- 一个非常精妙的SQL语句
- 再看的
- 一个交警的肺腑之言!看过没看过的再看看
- 一个单例的实现
- 一个用C#表述的精妙的foreach模式
- Perl分割字符串的一个精妙的写法
- 一个语句整合了case when的精妙用法
- #define的一个精妙用途,用来标记起始和结束
- 存一个链接,以后再看。
- 再看星星的《喜剧之王》
- 再看《肖申克的救赎》
- 一个简单的单例测试
- 一个单例模式的简单例子
- 348B
- mybatis配置文件详解
- 工程物料管理信息化建设(一)——什么是工程物料管理系统
- Unable to connect to server xxxx: 未将对象引用设置到对象的实例
- python---函数基础课程
- 再看一个精妙的单例
- lis算法
- 素描绘画Sketch Touch
- hdu 3572 Task Schedule【网络流建图应用】
- Spring4.X系列之IOC
- Visual C++异常处理机制原理与应用(一)—— C/C++结构化异常处理之try-finally终止处理的使用与原理(上)
- 编译linux内核
- Algorithm3——最长公共子序列(LCS)
- day02-还是tkinter