关于 C++ 实现static 成员 何时候析构的有关问题

关于 C++ 实现static 成员 何时候析构的问题 .
有个类用上了单例模式
class A
{
private:
  static A* _instance;
public:
  static A* GetInstance();
  virtual ~A();
};

请问这个 A::_instance 如何释放?

如果这样写:
~A()
{
  if(_instance)
  {
  delete _instance; _instance = NULL;
  }
}

会造成 ~A() 函数的递归。

看网上有个思路,改造 class A 如下:
class A
{
private:
  static A* _instance;
public:
  static A* GetInstance();
  virtual ~A();

  class CGarbo
  {
  public:
  ~CGarbo()
  {
  // 在这里回收 _instance
  delete _instance; _instance = NULL;
  }
  };
  // 定义一个 static 成员,据说这个成员会在程序结束后进入 析构函数
  static CGarbo _garbo;
};

现在的问题是,我按照上面的代码做 ,CGarbo 类的析构函数不会进去。
不知道哪里做错了。

请各位赐教~

不知道各位看的清楚我的问题没有,如果我没说清楚,就回帖告诉我,我继续完善描述。
谢谢!


------解决方案--------------------
这种情况我没有遇到过。帮楼主顶贴吧,看哪位明白人能解答下。小弟也学习学习。
------解决方案--------------------
之前看错了,抱歉
-----------------
对于static 成员是个指针, 中间 new 过, 以后也不用管吗? 这样不会造成内存泄露吗 ?
比如有 int *p = new int();
这种情况可以在析构函数里面直接调用 delete p;
------解决方案--------------------
void fnExit (void);
class A
{
private:
friend void fnExit (void);
static A* _instance;
public:
static A* GetInstance();
virtual ~A();
};


void fnExit1 (void)
{
delete A::_instance; 
A::_instance = NULL;
}


int main ()
{
atexit (fnExit1);
return 0;
}
------解决方案--------------------
用 atexit
C/C++ code
void fnExit (void);
class A
{
private:
  friend void fnExit (void);
  static A* _instance;
public:
  static A* GetInstance();
  virtual ~A();
};


void fnExit1 (void)
{
  delete A::_instance;  
  A::_instance = NULL;
}


int main ()
{
  atexit (fnExit1);   
  return 0;
}