Использование конструктора удаленных копий в синглтоне

Я реализовал шаблон синглтона, как этот, есть мой код:

заголовочный файл:

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

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

private:
Settings_manager();
};

реализация:

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

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

Когда я пытаюсь использовать get_instance функция в main как это:

Settings_manager set = Settings_manager::get_instance();

или же Settings_manager set = std::move(Settings_manager::get_instance());

я получил

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

Может кто-нибудь сказать, что не так и объяснить? Благодарю.

3

Решение

Подумайте, что вы пытаетесь сделать здесь:

Settings_manager set = Settings_manager::get_instance();

У тебя есть синглтон, get_instance(), а ты пытаешься его скопировать? Это как бы победило цель синглтона, если бы вы могли просто … создать два из них, верно?

Вы хотите взять ссылка:

Settings_manager& set = Settings_manager::get_instance();

Сюда, set является экземпляр синглтона. Не копия этого.

14

Другие решения

get_instance возвращает ссылку на ваш синглтон, который вы затем сохраняете в локальном Settings_manager переменная, которая должна сделать копию. set должна быть ссылочной переменной:

Settings_manager &set = Settings_manager::get_instance();
5

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector