c++实现单例模式的深层有关问题求讨论

c++实现单例模式的深层问题求讨论
小弟自己实现了一个单例代码类似于这样

//Singleton.h

#include <iostream>  
using namespace std;  
//单例类的C++实现  
class Singleton  
{  
private:  
 Singleton();//注意:构造方法私有  
 ~Singleton();  
 static Singleton* instance;//惟一实例  
 int m_var;//成员变量(用于测试)  
public:  
 static Singleton* GetInstance();//用来获得实例  
 int getVar();//获得var的值  
 void setVar(int);//设置var的值  
}; 

//Singleton.cpp

Singleton* Singleton::instance = NULL;
  
//构造方法实现  
Singleton::Singleton()  
{  


Singleton::~Singleton()
{
 if(instance != NULL)
 {
  delete instance;
 }
}
 
Singleton* Singleton::GetInstance()  
{  
 if(instance == NULL)
 {
  instance = new Singleton();
 }
 else
 {
  return instance; //请注意这个地方是有错误的,该方法不确定一定能返回值。
 }
}  
//seter && getter含数  
int Singleton::getVar()  
{  
 return this->m_var;  
}  
void Singleton::setVar(int var)  
{  
  //m_var = var; 如果这么写执行程序会段错误
  //this->m_var = var; 这么写也是段错误
  instance->m_var = var; 这么写居然对了,程序执行没有任何问题


  
//main.cpp
   
int main(int argc, char* argv[])  
{  
 Singleton::GetInstance()->setVar(1);  
 cout<<"var = "<<Singleton::GetInstance()->getVar()<<endl;  
 return 0;  
}

求高人指点,这段代码之所以能够正常运行的原理

------解决方案--------------------
GetInstance()函数那里else要去掉,返回了一个错误的指针,但由于setvar是直接用的instance,这个已经初始化过了,所以是正确的,如果用this则出错,以后的调用不会返回错误因此不会再有问题
------解决方案--------------------
instance是静态变量,自然无论在那里调用都是一样的,至于错误的指针为啥能调用函数还真是不大清楚