#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
#include <ctype.h>
class CSingleton
{
public:
static CSingleton* CreateInstance(); // 获取实例
virtual ~CSingleton(); // 对应手动delete后能重新创建实例
void print();
protected:
CSingleton();
class CGarbo // 进程结束时候能自动回收实例资源,完美的释放资源
{
public:
~CGarbo();
};
private:
static CSingleton* m_instance;
static CGarbo m_garbo;
};
CSingleton* CSingleton::m_instance = NULL;
CSingleton::CGarbo CSingleton::m_garbo;
CSingleton::CGarbo::~CGarbo()
{
if (NULL != CSingleton::m_instance)
{
delete CSingleton::m_instance;
CSingleton::m_instance = NULL;
printf("delete m_instance completed.\n");
}
}
CSingleton::CSingleton()
{
}
CSingleton::~CSingleton()
{
if (NULL != m_instance)
{
m_instance = NULL;
}
}
CSingleton* CSingleton::CreateInstance()
{
if (NULL == m_instance)
{
m_instance = new CSingleton();
}
return m_instance;
}
void CSingleton::print()
{
printf("print\n");
}
void test()
{
CSingleton* instance = CSingleton::CreateInstance();
instance->print();
}
int main(int argc, char** argv)
{
test();
return 0;
}
单例模式,完全版
最新推荐文章于 2023-05-24 11:53:28 发布