Публичный удаленный или частный по умолчанию ctor/assignment/copy ctor?

Если я хочу запретить копирование конструкции / назначения, то это:

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

Такой же как:

class foo
{
private:
   foo(const foo&) = default;
   foo& operator = (const foo&) = default;
};

Какой путь правильный и почему?

1 ответ

Решение

Правильный путь - это первое решение: конструктор копирования и операторы присваивания не определены, поэтому любая попытка их использования не будет компилироваться.

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

Вторым является объявление и определение неявно сгенерированных форм как private:

  • Объект типа foo разрешено копировать самому
  • Любой класс или метод друга также может копировать foo

Таким образом, копирование конструкции / назначения все еще возможно

Вы также можете использовать boost::noncopyable как базовый класс, он делает именно это с C++11 (см. исходный код здесь)

Другие вопросы по тегам