C++ 为什么我的单身人士无法保持会员价值
C++ Why is my singleton not maintaining member value
我正在学习C++,我正在尝试实现一个单例。代码如下:
#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
值。这是什么原因呢?我正在遵循教程中的代码。
两个实例实际上是相同的
不,它们不是同一个实例。即使返回引用Configuration::instance()
,main()
中的变量也不会声明为引用,因此将复制返回的引用。您需要将它们声明为引用以避免复制。如
auto& config = Configuration::instance();
~
auto& config2 = Configuration::instance();
~
住
顺便说一句:为了确保只有一个实例,您可能需要delete
复制/移动构造函数和赋值运算符。
相关文章:
- 为什么"do while"循环不断退出,即使条件计算结果为 false?
- 为什么在全局范围内使用"extern int a"似乎不行?
- 为什么在popback()操作之后,它仍然打印完整的矢量
- 为什么随机数生成器不在void函数中随机化数字,而在main函数中随机化
- 为什么两个不同的未命名名称空间可以共存于一个cpp文件中
- 为什么会发生堆损坏
- 为什么使用 "this" 指针调用派生成员函数?
- C++我的数学有什么问题,为什么我的代码不能正确循环
- 为什么比较运算符如此快速
- 为什么 Serial.println(<char[]>);返回随机字符?
- 为什么这个运算符<重载函数对 STL 算法不可见?
- 为什么我的好友类无法访问私人会员?
- 为什么我不能拥有某些私有会员功能?
- 为什么这个呼吁会员函数模棱两可
- 为什么我的好友功能无法访问私人会员?
- 为什么这段代码有效?我的意思是会员是私人的
- 为什么使用此奇怪的调用来初始化会员值的类中此功能
- C++ 为什么我的单身人士无法保持会员价值
- 为什么 std::basic_ostream 同时有免费和会员运营商<<?
- 为什么这个会员的价值会发生变化?