C ++为什么我的单例不能维护成员值

时间:2016-03-06 16:12:13

标签: c++ singleton

我正在学习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
}

我期望如果我在一个实例上设置语言的值,则第二个实例将保持相同的值,因为两个实例实际上是相同的。

但在上面的代码config2configlanguageName的值不同。这是什么原因?我正在按照教程中的代码进行操作。

1 个答案:

答案 0 :(得分:2)

  

两个实例实际上是相同的

不,他们不是同一个例子。即使Configuration::instance()返回引用,main()中的变量也不会被声明为引用,因此将复制返回的引用。您需要将它们声明为引用以避免复制。如,

auto& config = Configuration::instance();
    ~
auto& config2 = Configuration::instance();
    ~

LIVE

BTW:为确保只有一个实例,您可能需要delete复制/移动构造函数和赋值运算符。