关于类中静态指针的释放问题
先上代码
class TESTA{public: static TESTA * GetInstance(); ~TESTA(void);private: TESTA(); static TESTA * m_Instance;};TESTA * TESTA::m_Instance = NULL;TESTA * TESTA::GetInstance(){ if( m_Instance == NULL ) { m_Instance = new TESTA; } return m_Instance;}TESTA::TESTA(){}TESTA::~TESTA( void ){}TESTA * TESTA::GetInstance(){ static TESTA m_Instance ; return &m_Instance;}
[解决办法]
#include <iostream>using namespace std;class TESTA{public: static TESTA * GetInstance(); static void DeleteInstance(); // 增加这行 ~TESTA(void);private: TESTA(); static TESTA * m_Instance;};TESTA * TESTA::m_Instance = NULL;TESTA * TESTA::GetInstance(){ if( m_Instance == NULL ) { m_Instance = new TESTA; } return m_Instance;}void TESTA::DeleteInstance() // 增加实现{ if(m_Instance != NULL) { delete m_Instance; m_Instance = NULL; }}TESTA::TESTA(){ cout << "a singleton constructed." << endl;}TESTA::~TESTA( void ){ cout << "a singleton destructed." << endl;}int main(int argc, char** argv){ TESTA* p1 = TESTA::GetInstance(); cout << (void*)p1 << endl; TESTA* p2 = TESTA::GetInstance(); cout << (void*)p2 << endl; // 可以看到只构造了一次,两次输出的地址是相同的。 TESTA::DeleteInstance(); TESTA* p3 = TESTA::GetInstance(); cout << (void*)p3 << endl; TESTA* p4 = TESTA::GetInstance(); cout << (void*)p4 << endl; return 0;}
[解决办法]
搞个smart point 不就解决问题了?
[解决办法]