写了个单例模式的模板,为什么Garbo没有析构,该如何解决

写了个单例模式的模板,为什么Garbo没有析构
写了个单例模式的模板,在Garbo析构函数设断点了,发现没有被析构,这是为什么呢?

.h文件:

class CriticalSection
{
public:
  CriticalSection() {InitializeCriticalSection(&cs_);}
  ~CriticalSection() {DeleteCriticalSection(&cs_);}
  void Lock() {EnterCriticalSection(&cs_);}
  void UnLock() {LeaveCriticalSection(&cs_);}

protected:
  CRITICAL_SECTION cs_;
};


template <typename T>
class Singleton
{
public:
  static T* GetInstance()
  {
  if(!m_)
  {
  cs.Lock();
  if(!m_)
  m_ = new T();
  cs.UnLock();
  }
  return m_;
  }

  ~Singleton(){}

private:
  Singleton(){}

  static T* m_;
  static CriticalSection cs;

  class Garbo
  {
  public:
  ~Garbo()
  {
  if(Singleton<T>::m_){
  delete Singleton<T>::m_;
  Singleton<T>::m_ = NULL;
  }
  }
  };

  static Garbo garbo;
};

.cpp文件:
template<typename T>
T* Singleton<T>::m_ = NULL;

template<typename T>
CriticalSection Singleton<T>::cs;

template<typename T>
typename Singleton<T>::Garbo Singleton<T>::garbo;

// 测试类
class CA{
public:
  CA(){std::cout<<"AAAA\n";}

  ~CA(){
  std::cout<<"BBBB\n";
  }

  void Run(){
  for(int k = 0; k < 10; ++k)
  std::cout<< k << " ";
  }
};

int main()
{
  CA *a = Singleton<CA>::GetInstance();
  a->Run();

  return 0;
}


------解决方案--------------------
template ,一般情况下你没用到的东西编译器生成代码的时候就不会帮你生成