c++单例模式(线程安全)
2015-10-01 16:39
260 查看
1.构造函数为private,生成对象的时候,编译器调用构造函数属于外部调用。
2.构造函数为private不能被继承,因为当其子类初始化的时候需要调用构造函数,但此时构造函数为private,不能被调用。
所以,该类只有一个实例。
空间换时间
#include "stdafx.h"
#include <iostream>
using namespace std;
class Singleton
{
private:
Singleton() {};
static const Singleton* m_pSingleton;
public:
static const Singleton* GetInstance();
void Test() const;
};
const Singleton* Singleton::m_pSingleton = new Singleton;
const Singleton* Singleton::GetInstance()
{
/*if(NULL == m_pSingleton)
{
m_pSingleton = new Singleton;
}*/
return m_pSingleton;
}
void Singleton::Test() const
{
cout<<"Test"<<endl;
}
int _tmain(int argc, _TCHAR* argv[])
{
const Singleton* pSingleton = Singleton::GetInstance();
pSingleton->Test();
getchar();
return 0;
}
2.构造函数为private不能被继承,因为当其子类初始化的时候需要调用构造函数,但此时构造函数为private,不能被调用。
所以,该类只有一个实例。
空间换时间
#include "stdafx.h"
#include <iostream>
using namespace std;
class Singleton
{
private:
Singleton() {};
static const Singleton* m_pSingleton;
public:
static const Singleton* GetInstance();
void Test() const;
};
const Singleton* Singleton::m_pSingleton = new Singleton;
const Singleton* Singleton::GetInstance()
{
/*if(NULL == m_pSingleton)
{
m_pSingleton = new Singleton;
}*/
return m_pSingleton;
}
void Singleton::Test() const
{
cout<<"Test"<<endl;
}
int _tmain(int argc, _TCHAR* argv[])
{
const Singleton* pSingleton = Singleton::GetInstance();
pSingleton->Test();
getchar();
return 0;
}
相关文章推荐
- C语言及程序设计.第二十三课.项目1.被3或者5整除的数
- c++ get与set方法的宏定义实现
- C语言学习笔记分享之数组(冒泡排序)
- 在C++中,为了让某个类只能通过new来创建实例(即如果直接创建对象,编译器将报错),怎样做?
- stitching.cpp鱼眼图像拼接融合 源码分析
- c语言入门经典(第5版)
- C语言单向动态链表程序,实现链表的建立,合并,重新排序,链表元素的插入与删除,以及根据元素成员的值进行元素删除。
- C++容器(三):pair类型
- C++容器(三):pair类型
- C++primer:string流
- C++中的Static关键字
- 黑马程序员---C语言学习笔记之预处理指令、宏和条件编译
- c/c++: uint8_t uint16_t uint32_t uint64_t size_t ssize_t数据类型
- c语言知识点复习
- C++中new和malloc的区别
- 递归求解1~9组成的特殊9位整数
- C++类包含问题(重复包含和相互包含)
- 黑马程序员——OC语言基础---对象和方法
- Java jna学习之----VC++2010创建并调用动态链接库dll
- 截木棍(最大公约数)