@Gianni nop означает бездействие. Перемещение не всегда отличается или дешевле, чем копировать. Перемещение - это всего лишь оптимизация или способ передачи права собственности на объекты, которые нельзя копировать.

равильно объявлять методы создания экземпляров при определении класса интерфейса?

Абстрактные базовые классы должны иметь виртуальный деструктор по очевидным причинам. Однако затем выдается следующее предупреждение компиляции: «InterfaceClass определяет деструктор не по умолчанию, но не определяет конструктор копирования, оператор назначения копирования, конструктор перемещения или оператор назначения перемещения», что является «правилом пяти». ».

Я понимаю, почему «правило пяти» должно соблюдаться в целом, но применимо ли оно к абстрактному базовому классу или интерфейсу?

Моя импликация тогда:

class InterfaceClass
{
    //  == INSTANTIATION ==
  protected:
    //  -- Constructors --
    InterfaceClass()                      = default;
    InterfaceClass(const InterfaceClass&) = default;
    InterfaceClass(InterfaceClass&&)      = default;

  public:
    //  -- Destructors --
    virtual ~InterfaceClass() = 0;


    //  == OPERATORS ==
  protected:
    //  -- Assignment --
    InterfaceClass& operator=(const InterfaceClass&) = default;
    InterfaceClass& operator=(InterfaceClass&&)      = default;


    //  == METHODS ==
  public:
    // Some pure interface methods here...
};



//  == INSTANTIATION ==
//  -- Destructors --
InterfaceClass::~InterfaceClass()
{
}

Это верно? Должны ли эти методы быть= delete вместо? Есть ли какой-нибудь способ объявить деструктор виртуальным чистым, хотя он по-прежнему остается по умолчанию?

Даже если я объявлю деструктор как:virtual ~InterfaceClass() = default;Если я не буду явно задавать по умолчанию остальные четыре, то получу то же предупреждение компилятора.

Tl; dr: Как правильно выполнить «правило пяти» для класса интерфейса, поскольку пользователь должен определить виртуальный деструктор.

Спасибо за ваше время и помощь!

Ответы на вопрос(3)

Ваш ответ на вопрос