Как использовать синглтон Майера без конструктора копирования? - PullRequest
0 голосов
/ 27 апреля 2020

Это синглтон Майера, о котором упоминали некоторые люди.

static Singleton& getinstance()
{
     static Singleton s_obj;
     return s_obj;
}

Но как пользователь использует этот API getinstace ()?

Если я использую его таким образом.

Singleton myobj = getinstance();

Я на самом деле сделаю копию s_obj верно? Итак, у меня есть 2 экземпляра myobj и s_obj, которые нарушают цель синглтона.

Кто-нибудь может объяснить, как правильно понимать синглтон Мейера?

1 Ответ

0 голосов
/ 27 апреля 2020

Дело в том, что вы делаете конструктор копирования, конструктор перемещения, оператор назначения копирования, оператор назначения перемещения удаляемым, а затем вы делаете используемые конструкторы частными, чтобы никто другой не мог их скопировать:

class Singleton
{
public:
  Singleton(Singleton const&) = delete;
  Singleton(Singleton&&) = delete;
  Singleton& operator=(Singleton const&) = delete;
  Singleton& operator=(Singleton&&) = delete;

  static auto& instance()
  {
    static Singleton obj;
    return obj;
  }

private:
  Singleton() { /* ... */ }
};

int
main()
{
  auto& ref = Singleton::instance(); // OK
  auto copy = Singleton::instance(); // Won't compile
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...