设计模式---单件(C++版) 一个简单实例(避免用户忘记delete单件实例)
来源:互联网 发布:淘宝儿童女装秋装 编辑:程序博客网 时间:2024/04/24 09:01
上次提供的代码没有考虑到客户忘记delete这一点;所以在网上看了一些别人的代码,整理了一下发了上来!
#include <memory>
#include <string>
#include <iostream>
using namespace std;
/**//*
#include <memory>
auto_ptr是可以避免忘记delete如下
auto_ptr<Int> pi ( new Int( 5 ) );
cout << pi->x << endl;
*/
class CSingletonAutoPtr
...{
private:
static auto_ptr<CSingletonAutoPtr> m_auto_ptr;
static CSingletonAutoPtr* m_instance;
protected:
CSingletonAutoPtr();
CSingletonAutoPtr(const CSingletonAutoPtr&);
virtual ~CSingletonAutoPtr();
//allow auto_ptr to delete, using protected ~CSingletonAutoPtr()
friend class auto_ptr<CSingletonAutoPtr>;
public:
static CSingletonAutoPtr* GetInstance();
void Test();
};
CSingletonAutoPtr* CSingletonAutoPtr::m_instance = NULL;
auto_ptr<CSingletonAutoPtr> CSingletonAutoPtr::m_auto_ptr;
CSingletonAutoPtr::CSingletonAutoPtr()
...{
cout << "CSingletonAutoPtr::CSingletonAutoPtr()" << endl;
m_auto_ptr = auto_ptr<CSingletonAutoPtr>(this);
}
CSingletonAutoPtr::~CSingletonAutoPtr()
...{
cout << "CSingletonAutoPtr::~CSingletonAutoPtr()" << endl;
}
CSingletonAutoPtr* CSingletonAutoPtr::GetInstance()
...{
if(m_instance == NULL)
m_instance = new CSingletonAutoPtr();
return m_instance;
}
void CSingletonAutoPtr::Test()
...{
cout << "CSingletonAutoPtr::Test()" << endl;
}
class CSingletonStaticObj
...{
private:
static CSingletonStaticObj m_instance;
protected:
CSingletonStaticObj();
CSingletonStaticObj(const CSingletonStaticObj&);
public:
virtual ~CSingletonStaticObj(); //must public
static CSingletonStaticObj& GetInstance();
void Test();
};
CSingletonStaticObj CSingletonStaticObj::m_instance;
CSingletonStaticObj::CSingletonStaticObj()
...{
cout << "CSingletonStaticObj::CSingletonStaticObj()" << endl;
}
CSingletonStaticObj::~CSingletonStaticObj()
...{
cout << "CSingletonStaticObj::~CSingletonStaticObj()" << endl;
}
CSingletonStaticObj& CSingletonStaticObj::GetInstance()
...{
return m_instance;
}
void CSingletonStaticObj::Test()
...{
cout << "CSingletonStaticObj::Test()" << endl;
}
int main()
...{
CSingletonAutoPtr* pSingleton = CSingletonAutoPtr::GetInstance();
pSingleton->Test();
CSingletonStaticObj& singleton = CSingletonStaticObj::GetInstance();
singleton.Test() ;
return 0;
}
#include <string>
#include <iostream>
using namespace std;
/**//*
#include <memory>
auto_ptr是可以避免忘记delete如下
auto_ptr<Int> pi ( new Int( 5 ) );
cout << pi->x << endl;
*/
class CSingletonAutoPtr
...{
private:
static auto_ptr<CSingletonAutoPtr> m_auto_ptr;
static CSingletonAutoPtr* m_instance;
protected:
CSingletonAutoPtr();
CSingletonAutoPtr(const CSingletonAutoPtr&);
virtual ~CSingletonAutoPtr();
//allow auto_ptr to delete, using protected ~CSingletonAutoPtr()
friend class auto_ptr<CSingletonAutoPtr>;
public:
static CSingletonAutoPtr* GetInstance();
void Test();
};
CSingletonAutoPtr* CSingletonAutoPtr::m_instance = NULL;
auto_ptr<CSingletonAutoPtr> CSingletonAutoPtr::m_auto_ptr;
CSingletonAutoPtr::CSingletonAutoPtr()
...{
cout << "CSingletonAutoPtr::CSingletonAutoPtr()" << endl;
m_auto_ptr = auto_ptr<CSingletonAutoPtr>(this);
}
CSingletonAutoPtr::~CSingletonAutoPtr()
...{
cout << "CSingletonAutoPtr::~CSingletonAutoPtr()" << endl;
}
CSingletonAutoPtr* CSingletonAutoPtr::GetInstance()
...{
if(m_instance == NULL)
m_instance = new CSingletonAutoPtr();
return m_instance;
}
void CSingletonAutoPtr::Test()
...{
cout << "CSingletonAutoPtr::Test()" << endl;
}
class CSingletonStaticObj
...{
private:
static CSingletonStaticObj m_instance;
protected:
CSingletonStaticObj();
CSingletonStaticObj(const CSingletonStaticObj&);
public:
virtual ~CSingletonStaticObj(); //must public
static CSingletonStaticObj& GetInstance();
void Test();
};
CSingletonStaticObj CSingletonStaticObj::m_instance;
CSingletonStaticObj::CSingletonStaticObj()
...{
cout << "CSingletonStaticObj::CSingletonStaticObj()" << endl;
}
CSingletonStaticObj::~CSingletonStaticObj()
...{
cout << "CSingletonStaticObj::~CSingletonStaticObj()" << endl;
}
CSingletonStaticObj& CSingletonStaticObj::GetInstance()
...{
return m_instance;
}
void CSingletonStaticObj::Test()
...{
cout << "CSingletonStaticObj::Test()" << endl;
}
int main()
...{
CSingletonAutoPtr* pSingleton = CSingletonAutoPtr::GetInstance();
pSingleton->Test();
CSingletonStaticObj& singleton = CSingletonStaticObj::GetInstance();
singleton.Test() ;
return 0;
}
- 设计模式---单件(C++版) 一个简单实例(避免用户忘记delete单件实例)
- 单件模式的两个简单实例
- 创建一个单件实例
- 单件实例
- iOS 单件:只保留一个实例
- 单件模式(c++)
- 设计模式-单件
- 【设计模式】单件
- 设计模式---单件
- C语言设计模式:单件模式
- 单实例模式的实现(singleton)----单件
- 简单的单件模式类(C#)
- C语言和设计模式(之单件模式)
- C语言和设计模式(之单件模式)
- C语言和设计模式(单件模式)
- 设计模式---单件(C++版) 比较通用的单件模式(STL实现)
- 设计模式--单件模式(Singleton)
- 设计模式(一)单件模式
- 书法
- Eclipse安装SVN支持详解
- 程序员
- SQL使用LIKE匹配
- LINUX命令大全
- 设计模式---单件(C++版) 一个简单实例(避免用户忘记delete单件实例)
- 占位:
- asp.net Ajax--Calendar控件使用
- 占位:
- Linux 标准I/O流学习
- 不要做浮躁的人
- ARP欺骗病毒
- CODE阶段的架构设计
- oracle 权限与角色