В дополнение к ответу Xeo:
Да, все правильно. Если вы хотите, вы можете удалить все удаленные элементы, кроме конструктора удаленных копий и назначения удаленных копий, и иметь тот же эффект:
struct Picture { // Also ok
// 'explicit': no accidental cast from string to Picture
explicit Picture(const string &filename) { /* load image from file */ }
// no copy
Picture(const Picture&) = delete;
// no assign
Picture& operator=(const Picture&) = delete;
};
Явное объявление конструктора копирования запрещает неявную генерацию конструктора по умолчанию, конструктора перемещения и членов перемещения. Явное удаление этих членов - дело вкуса. Некоторые, вероятно, увидят это как хорошую документацию. Другие могут считать это слишком многословным.