C++实现单例模式的一个例子,有些不明白的地方解决方案

C++实现单例模式的一个例子,有些不明白的地方
C/C++ code

#include "string.h"
#include "iostream.h"


class SingletonClass
{
private:
    static SingletonClass instance;
    char Classname[30];
    SingletonClass()
    {
        strcpy(Classname, "SingletonClass");
    }
public:
    char *getClassName()
    {
        return Classname;
    }
    static SingletonClass getInstance()
    {
        return instance;
    }
    void setClassName(char *p)
    {
        strcpy(Classname, p);
    }

};

SingletonClass SingletonClass::instance;

int main(int argc, char *argv[])
{
    SingletonClass *p = &SingletonClass::getInstance();//获取实例的指针
    cout<<"class name:"<<p->getClassName()<<endl;
    p->setClassName("123456");
    cout<<"class name:"<<p->getClassName()<<endl;
    
    SingletonClass *p1 = &SingletonClass::getInstance();//再次获取实例的指针
    cout<<"class name:"<<p1->getClassName()<<endl;//输出123456
    cout<<"class name:"<<p->getClassName()<<endl;//输出SingletonClass

    return 0;
}



写了一个实现单例的类,但是我在主函数中获取两次实例,却是不同的实例?输出了不同的值。

我又输出了p和p1两个指针的地址,也是不同的值。

------解决方案--------------------
static SingletonClass getInstance()
{

。。。。要返回引用啊。
------解决方案--------------------
拷贝构造,编译器优化