Use of deleted copy constructor in the singleton

◇◆丶佛笑我妖孽 提交于 2019-12-05 01:35:58

问题


I've implemented the singleton pattern like this, there is my code:

header file:

class Settings_manager{
public:
    static Settings_manager& get_instance();

    void operator=(Settings_manager const&) =delete;
    Settings_manager(Settings_manager const&) =delete;
...

private:
    Settings_manager();
};

implementation:

Settings_manager& Settings_manager::get_instance()
{
    static Settings_manager instance;
    return instance;
}

Settings_manager::Settings_manager()
{
    read_file();
}

When I try use get_instance function in main like this:

Settings_manager set = Settings_manager::get_instance();

or Settings_manager set = std::move(Settings_manager::get_instance());

I get

error: use of deleted function 'Settings_manager::Settings_manager(const Settings_manager&)'
 Settings_manager set = Settings_manager::get_instance();

Can somebody tell, what's wrong and explain it? Thanks.


回答1:


Consider what you're trying to do here:

Settings_manager set = Settings_manager::get_instance();

You have your singleton, get_instance(), and you're trying to copy it? That would kind of defeat the purpose of singleton if you could just... create two of them right?

You want to take a reference:

Settings_manager& set = Settings_manager::get_instance();

This way, set is the singleton instance. Not a copy of it.




回答2:


get_instance returns a reference to your singleton, which you then store in a local Settings_manager variable, which needs to make a copy. set should be a reference variable:

Settings_manager &set = Settings_manager::get_instance();


来源:https://stackoverflow.com/questions/39934890/use-of-deleted-copy-constructor-in-the-singleton

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!