Наследование и удаление конструкторов копирования и перемещения

Я хочу иметь класс с наследованием третьего уровня. Я не буду перемещать свои классы или копировать их. На самом деле, они будут созданы только один раз. Я хочу проверить, можно ли будет удалить перемещение и скопировать конструкторы и назначения, как показано ниже:

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. Можно ли удалить все конструкторы перемещения и копирования и операторы присваивания?
  2. Если это возможно, почему я получаю ошибку?
  3. Если это возможно, это хороший выбор?

1 ответ

Решение

Вы получаете ошибку, потому что, очевидно, вы удаляете свои методы не в том месте. Поскольку вы добавляете к ним префикс имени класса, похоже, что вы удаляете их в реализации. Правильный способ удаления - в определении класса, например:

class foo {
   foo(const foo& ) = delete;
};
Другие вопросы по тегам