Использование конструктора удаленных копий в singleton
Я реализовал одноэлементный шаблон, например , есть мой код:
заголовочный файл:
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();
Может кто-нибудь сказать, что не так и объяснить? Спасибо.
Ответы
Ответ 1
Посмотрите, что вы пытаетесь сделать здесь:
Settings_manager set = Settings_manager::get_instance();
У вас есть синглтон, get_instance()
, и вы пытаетесь его скопировать? Это вроде бы поразило бы цель синглтона, если бы вы могли просто создать два из них правильно?
Вы хотите взять ссылку:
Settings_manager& set = Settings_manager::get_instance();
Таким образом, set
является экземпляром singleton. Не копия.
Ответ 2
get_instance
возвращает ссылку на ваш синглтон, который затем сохраняется в локальной переменной Settings_manager
, которая должна сделать копию. set
должна быть ссылочной переменной:
Settings_manager &set = Settings_manager::get_instance();