下面是单例类的代码
class single{
private:
int i;
single(int x): i(x){
}
public:
static single& getInstance(){
static single s(10);
return s;
}
void incPrint(){
++i;
cout i " ";
}
};
现在相同的代码为 2 个不同的代码给出了两个不同的结果
single d1 = single::getInstance();
d1.incPrint();
d1.incPrint();
single d2 = single::getInstance();
d2.incPrint();
d2.incPrint();
此代码产生输出:
11 12 11 12
而这段代码
single & d1 = single::getInstance();
d1.incPrint();
d1.incPrint();
single & d2 = single::getInstance();
d2.incPrint();
d2.incPrint();
产生结果
11 12 13 14
后者是所需的输出。这是因为设计问题还是用户编码问题造成的异常?如何确保只获得第二个结果?
谢谢