С явно удаленными функциями-членами в C ++ 11, стоит ли наследовать от некопируемого базового класса?

С явно удаленными функциями-членами в C ++ 11, стоит ли наследовать от некопируемого базового класса?

I ' Я говорю о трюке, при котором вы частным образом наследуете базовый класс, у которого есть частный или удаленный конструктор копирования и присваивание копии (например, boost :: noncopyable ).

Применимы ли преимущества, изложенные в этом вопросе , к C ++ 11?


Я не понимаю, почему некоторые люди утверждают, что легче сделать класс не копируемым в C ++ 11.

В C ++ 03:

private:
    MyClass(const MyClass&) {}
    MyClass& operator=(const MyClass&) {}

В C ++ 11:

MyClass(const MyClass&) = delete;
MyClass& operator=(const MyClass&) = delete;

РЕДАКТИРОВАТЬ:

Как отмечали многие, было ошибкой предоставлять пустые тела (т. Е. {}) Для частной копии конструктор и оператор присваивания копии, потому что это позволит самому классу вызывать эти операторы без каких-либо ошибок. Сначала я начал не добавлять {}, но столкнулся с некоторыми проблемами компоновщика, которые заставили меня добавить {} по какой-то глупой причине (я не помню обстоятельств). Я знаю лучше знаю. : -)

58
задан Community 23 May 2017 в 12:16
поделиться