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是对的,您也需要隐藏复制构造函数。