目的:限制类的实例个数只能是一个
例子:
#define AGT_DECLARE_SINGLETON(ClassName) \
public: \
static ClassName *Instance(); \
private: \
static ClassName *m_pInstance; \
#define AGT_DEFINE_SINGLETON(ClassName) \
ClassName *ClassName::m_pInstance = NULL; \
ClassName *ClassName::Instance() \
{ \
if (NULL == m_pInstance) \
{ \
m_pInstance = new ClassName; \
} \
return m_pInstance; \
}
class Manager
{
private:
Manager() {}
public:
void show()
{
cout << "Success" << endl;
}
public:
AGT_DECLARE_SINGLETON(Manager) //单例模式声明
};
AGT_DEFINE_SINGLETON(Manager); //函数实现
int main()
{
Manager* manager = Manager::Instance();
manager->show();
Manager* manager1 = Manager::Instance();
Manager* manager2 = Manager::Instance();
if(manager1 == manager2)
{
cout << "manager1 = manager2" << endl;
}
else
{
cout << "manager1 != manager2" << endl;
}
return 0;
}