Shadasviar Shadasviar - 1 month ago 7
C++ Question

Use of deleted copy constructor in the singleton

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.

Answer

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.

Comments