threading really works against this design, especially if you want a pure singleton. you can visualize it like so:
class t_singleton {
public:
  static t_singleton& Get() {
    /* thread safety is a consideration here: */
    t_auto_ptr<t_singleton>& shared(Shared());
    if (shared.isNull()) {
      shared.setObject(new t_singleton);
    }
    /* and you should manage external references using another container type: */
    return Shared().reference();
  }
  static void DestroyIt() {
    /* thread safety is a consideration here: */
    Shared().destroy();
  }
private:
  static t_auto_ptr<t_singleton>& Shared() {
    static t_auto_ptr<t_singleton> s_Shared;
    return s_Shared;
  }
private:
  t_singleton();
  ~t_singleton();
};
but this should also suggest many threading red flags with pure singletons.
If you really want to extend this and enforce a pure singleton, you would need proper reference counting containers -- this suggests a singleton is a bad solution for this problem in multiple ways, and just adds a ton of unnecessary complexity. good luck!