bso*_*dra 2 c++ oop singleton ambiguity
下面是单例类的代码
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 " ";
}
};
Run Code Online (Sandbox Code Playgroud)
现在相同的代码为2个不同的代码提供了两个不同的结果
single d1 = single::getInstance();
d1.incPrint();
d1.incPrint();
single d2 = single::getInstance();
d2.incPrint();
d2.incPrint();
Run Code Online (Sandbox Code Playgroud)
此代码生成输出:
11 12 11 12
而这段代码
single & d1 = single::getInstance();
d1.incPrint();
d1.incPrint();
single & d2 = single::getInstance();
d2.incPrint();
d2.incPrint();
Run Code Online (Sandbox Code Playgroud)
产生结果
11 12 13 14
后者是所需的输出.由于设计问题或用户编码问题,这是异常吗?如何确保只获得第二个结果?
谢谢
T x = foo() 制作副本.
或表现为"好像"它制作副本.
而T& x = foo()当foo返回T&引用时,只做一个引用.
使复制构造函数和复制赋值运算符为私有.这将阻止人们制作所有副本.使复制赋值运算符保持私有可防止自我复制.
它不是从单词返回指针的替代方法getInstance.这将是让人们不知道始终存在实例的保证的绝对方式.指针指示它可以是nullpointer.
然而,最好的选择是不使用单身,如果你可以避免它.单身人士有很多问题.这些问题包括生命周期管理,线程安全以及与检测内存泄漏的工具的交互.
干杯&hth.,