我正在学习C ++,而我正试图实现一个Singleton。这是代码:
#include <string>
#include <iostream>
class Configuration{
Configuration(){
languageName = "English";
};
public:
std::string languageName;
static Configuration& instance(){
static Configuration _instance;
return _instance;
}
};
int main(){
auto config = Configuration::instance();
config.languageName = "Deutsch";
std::cout<<config.languageName<<std::endl;//Deutsch
auto config2 = Configuration::instance();
std::cout<<config.languageName<<std::endl;//Deutsch
std::cout<<config2.languageName<<std::endl;//English
std::cout<<(&config == &config2)<<std::endl;//0
}
我期望如果我在一个实例上设置语言的值,则第二个实例将保持相同的值,因为两个实例实际上是相同的。
但在上面的代码config2
和config
中languageName
的值不同。这是什么原因?我正在按照教程中的代码进行操作。
答案 0 :(得分:2)
两个实例实际上是相同的
不,他们不是同一个例子。即使Configuration::instance()
返回引用,main()
中的变量也不会被声明为引用,因此将复制返回的引用。您需要将它们声明为引用以避免复制。如,
auto& config = Configuration::instance();
~
auto& config2 = Configuration::instance();
~
BTW:为确保只有一个实例,您可能需要delete
复制/移动构造函数和赋值运算符。