С явно удаленными функциями-членами в С++ 11, стоит ли наследовать от неготовного базового класса?
Я говорю об трюке, в котором вы частно наследуете базовый класс, который имеет закрытый или удаленный экземпляр копии и назначение копии (например, boost::noncopyable
).
Являются ли преимущества в этом question доступными для С++ 11?
Я не понимаю, почему некоторые люди утверждают, что проще сделать класс не скопированным в С++ 11.
В С++ 03:
private:
MyClass(const MyClass&) {}
MyClass& operator=(const MyClass&) {}
В С++ 11:
MyClass(const MyClass&) = delete;
MyClass& operator=(const MyClass&) = delete;
EDIT:
Как отмечали многие люди, было ошибкой предоставлять пустые тела (например, {}) для частного конструктора копирования и оператора присваивания копии, поскольку это позволило бы самому классу вызывать эти операторы без каких-либо ошибок. Сначала я начал не добавлять {}, но столкнулся с некоторыми проблемами компоновщика, которые заставили меня добавить {} по какой-то глупой причине (я не помню обстоятельств). Я знаю, что лучше знаю.: -)