Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/155.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 静态单例的多个实例_C++_Singleton - Fatal编程技术网

C++ 静态单例的多个实例

C++ 静态单例的多个实例,c++,singleton,C++,Singleton,我最近使用的代码如下所示: using namespace std; class Singleton { public: static Singleton& getInstance(); int val; }; Singleton &Singleton::getInstance() { static Singleton s; return s; } class Test { public: Te

我最近使用的代码如下所示:

using namespace std;

class Singleton {
    public:
        static Singleton& getInstance();
        int val;
};

Singleton &Singleton::getInstance() {
    static Singleton s;
    return s;
}

class Test {
    public:
        Test(Singleton &singleton1);
};

Test::Test(Singleton &singleton1) {
    Singleton singleton2 = Singleton::getInstance();
    singleton2.val = 1;
    if(singleton1.val == singleton2.val) {
        cout << "Match\n";
    } else {
        cout << "No Match " << singleton1.val << " - " << singleton2.val << "\n";
    }   
}

int main() {
    Singleton singleton = Singleton::getInstance();
    singleton.val = 2;
    Test t(singleton);
}
使用名称空间std;
单件阶级{
公众:
静态单例&getInstance();
int-val;
};
Singleton和Singleton::getInstance(){
静态单态;
返回s;
}
课堂测试{
公众:
测试(单音和单音1);
};
测试::测试(单例和单例1){
Singleton singleton2=Singleton::getInstance();
singleton2.val=1;
if(singleton1.val==singleton2.val){

coutTest::Test的第一行创建了另一个Singleton实例(在堆栈上,本地不是引用)。您可以通过在Singleton上定义默认构造函数并将其设置为私有来防止这种情况。目前,任何人都可以创建Singleton的实例。

实际上,这里正在调用复制构造函数,因此您也必须解决此问题。BillyONeal是对的,您也需要隐藏复制构造函数。