Objective: the number of examples is restricted to only a
example:
#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; \ }
Manager class { Private: Manager () {} public: void Show () { COUT << "Success" << endl; } public: AGT_DECLARE_SINGLETON (Manager) // singleton statement }; AGT_DEFINE_SINGLETON (Manager); // Function achieve
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; }