- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
下面是单例类的代码
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
其中后者是所需的输出。这种异常是因为设计问题还是用户编码问题?如何确保只得到第二个结果?
谢谢
最佳答案
T x = foo()
复制一份。
或者表现得“好像”它制作了一个拷贝。
虽然 T& x = foo()
,当 foo
返回一个 T&
引用时,只做一个引用。
将复制构造函数和复制赋值运算符设为私有(private)。这将防止人们制作所有拷贝。将复制赋值运算符设为私有(private)可防止 self 复制。
从 getInstance
返回指向单例的指针不是替代方法。这将是让人们不知道总是有实例的保证的可靠方法。指针表示它可以是空指针。
但是,如果可以避免,最好的选择是不要使用单例。单例有很多问题。这些问题包括生命周期管理、线程安全以及与检测内存泄漏的工具的交互。
关于c++ - CPP 中的单例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7975029/
我最近购买了《C 编程语言》并尝试了 Ex 1-8这是代码 #include #include #include /* * */ int main() { int nl,nt,nb;
早上好!我有一个变量“var”,可能为 0。我检查该变量是否为空,如果不是,我将该变量保存在 php session 中,然后调用另一个页面。在这个新页面中,我检查我创建的 session 是否为空,
我正在努力完成 Learn Python the Hard Way ex.25,但我无法理解某些事情。这是脚本: def break_words(stuff): """this functio
我是一名优秀的程序员,十分优秀!