コンストラクタの中身を、

  if(m_Object != 0) {
    m_Object = new Singleton;
  }

にしないといけないね。
コンストラクタが private なのはこの場合あたりまえでしょ。
virtual なのは別に問題ないんじゃ。