С явно удаленными функциями-членами в 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;
РЕДАКТИРОВАТЬ:
Как отмечали многие, было ошибкой предоставлять пустые тела (т. Е. {}) Для частной копии конструктор и оператор присваивания копии, потому что это позволит самому классу вызывать эти операторы без каких-либо ошибок. Сначала я начал не добавлять {}, но столкнулся с некоторыми проблемами компоновщика, которые заставили меня добавить {} по какой-то глупой причине (я не помню обстоятельств). Я знаю лучше знаю. : -)