这是我的单身人士
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()在创建一个新实例,当然它不应该做.
在您的情况下get()不创建副本.分配给t1和t2正在做.为了避免它改变参考:MySingleton& t1 = MySingleton::get().
并且为了避免意外错误,请删除复制和赋值运算符:
MySingleton(const MySingleton& other) = delete;
MySingleton& operator=(const MySingleton& other) = delete;
Run Code Online (Sandbox Code Playgroud)