|
#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;
}
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/hada1234/archive/2007/12/03/1914112.aspx |
|