MFC-单例模式内存泄露有关问题

MFC---单例模式内存泄露问题
在VS2005环境下,用MFC编写的多线程程序,需要读取配置文件,所以用单例模式设计,结果有内存泄露的情况,具体如下:
头文件:
class CConfig
{
public:
virtual ~CConfig(void);
private:
CConfig(void);
static CConfig * m_pInstance;
public:
static CConfig* GetInstance();
        //其他函数
}
cpp文件:
CConfig * CConfig::m_pInstance = NULL;
CConfig::CConfig(void)
{
}
CConfig::~CConfig(void)
{
if ( m_pInstance != NULL ) 
delete m_pInstance;
}
CConfig* CConfig::GetInstance()
{
if ( m_pInstance == NULL )  //判断是否第一次调用
m_pInstance = new CConfig();
return m_pInstance;
}
在输出窗口查看:
Detected memory leaks!
Dumping objects ->
{273} normal block at 0x0021FB30, 36 bytes long.
 Data: <                > DC 82 8A 00 09 00 00 00 09 00 00 00 01 00 00 00 
{68} normal block at 0x00218D00, 42 bytes long.
 Data: <                > DC 82 8A 00 0C 00 00 00 0C 00 00 00 01 00 00 00 
e:\gas\config.cpp(43) : {67} normal block at 0x00218CC8, 12 bytes long.
 Data: <  x   ! @ ! > B8 B0 78 00 10 8D 21 00 40 FB 21 00 
Object dump complete.
哪位大牛指点一下啊,不胜感激!小弟新手,望详细说明解决办法


------解决方案--------------------
类的构造使用了保护/私有模式,类不能创建在栈中,因此默认的构析函数将不被调用

new的对象创建在堆中,必须调用delete释放


class CConfig
{
protected:
  virtual ~CConfig(void);
  CConfig(void);

  static CConfig * m_pInstance;
public:
  static CConfig* GetInstance();
  static void destory();

  //其他函数
};

CConfig * CConfig::m_pInstance = NULL;
CConfig::CConfig(void)
{
}
CConfig::~CConfig(void)
{
}
CConfig* CConfig::GetInstance()
{
  if ( m_pInstance == NULL )  //判断是否第一次调用
    m_pInstance = new CConfig();
  return m_pInstance;
}
void CConfig::destory()
{
  if(m_pInstance)
  {
    delete m_pInstance;
    m_pInstance = NULL;
  }
}


CConfig* pTest = CConfig::GetInstance(); //创建
CConfig::destory(); //销毁

------解决方案--------------------
这个static的CConfig指针没有被删除,所以内存泄露。
这个指针只需要被删除一次,所以在App的InitInstance末尾 或者 App的析构函数中delete都可以。
不要放在对话框中delete,除非这个对话框是主对话框。
------解决方案--------------------
对象指针只有在delete指针的时候才会调用对象的析构函数