c ++ 11 Singleton正在创建新实例

Jan*_*itz 0 c++ c++11

这是我的单身人士

class MySingleton {
private:
    int myNumber;
public:
    static MySingleton &get() {
        static MySingleton instance;
        return instance;
    }

    int getMyNumber() const {
        return myNumber;
    }

    void setMyNumber(int myNumber) {
        MySingleton::myNumber = myNumber;
    }
};
Run Code Online (Sandbox Code Playgroud)

这是测试它的代码

MySingleton t1 = MySingleton::get();
t1.setMyNumber(6);
printf("t1: %d \n", t1.getMyNumber());

MySingleton t2 = MySingleton::get();
printf("t2: %d \n", t2.getMyNumber());
Run Code Online (Sandbox Code Playgroud)

现在我得到的输出是

t1: 6 
t2: 0 
Run Code Online (Sandbox Code Playgroud)

但预计结果将是

t1: 6 
t2: 6 
Run Code Online (Sandbox Code Playgroud)

它看起来像是MySingleton::get()在创建一个新实例,当然它不应该做.

Mat*_*247 6

在您的情况下get()不创建副本.分配给t1t2正在做.为了避免它改变参考:MySingleton& t1 = MySingleton::get().

并且为了避免意外错误,请删除复制和赋值运算符:

MySingleton(const MySingleton& other) = delete;
MySingleton& operator=(const MySingleton& other) = delete;
Run Code Online (Sandbox Code Playgroud)