gpt4 book ai didi

c++ - CPP 中的单例

转载 作者:太空狗 更新时间:2023-10-29 23:31:12 25 4
gpt4 key购买 nike

下面是单例类的代码


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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com