CPP中的单身人士

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

后者是所需的输出.由于设计问题或用户编码问题,这是异常吗?如何确保只获得第二个结果?

谢谢

Che*_*Alf 9

T x = foo() 制作副本.

或表现为"好像"它制作副本.

T& x = foo()foo返回T&引用时,只做一个引用.


使复制构造函数和复制赋值运算符为私有.这将阻止人们制作所有副本.使复制赋值运算符保持私有可防止自我复制.

它不是从单词返回指针的替代方法getInstance.这将是让人们不知道始终存在实例的保证的绝对方式.指针指示它可以是nullpointer.

然而,最好的选择是不使用单身,如果你可以避免它.单身人士有很多问题.这些问题包括生命周期管理,线程安全以及与检测内存泄漏的工具的交互.

干杯&hth.,