Наследование и удаление конструкторов копирования и перемещения
Я хочу иметь класс с наследованием третьего уровня. Я не буду перемещать свои классы или копировать их. На самом деле, они будут созданы только один раз. Я хочу проверить, можно ли будет удалить перемещение и скопировать конструкторы и назначения, как показано ниже:
MyClass ( MyClass && ) = delete;
MyClass ( const MyClass & ) = delete;
MyClass & MyClass :: operator= ( const MyClass & ) = delete;
MyClass & MyClass :: operator= ( MyClass && ) = delete;
Когда я сделал это, я получил ошибку в конструкторе базового класса и базе базового класса:
initializing argument 1 of ‘Base::Base(const int&)’ [-fpermissive]
Мой конструктор выглядит так:
Base(const string & name):BaseOfBase(name){
};
Мои вопросы:
- Можно ли удалить все конструкторы перемещения и копирования и операторы присваивания?
- Если это возможно, почему я получаю ошибку?
- Если это возможно, это хороший выбор?
1 ответ
Решение
Вы получаете ошибку, потому что, очевидно, вы удаляете свои методы не в том месте. Поскольку вы добавляете к ним префикс имени класса, похоже, что вы удаляете их в реализации. Правильный способ удаления - в определении класса, например:
class foo {
foo(const foo& ) = delete;
};