Оператор удаления в абстрактном классе, как это работает

Как это работает

class Car
{
 public:
 Car() = default; 
 Car(const Car& other) = delete; 
 Car& operator=(const Car& other) = delete; 
 virtual void WhatsTheMake() = 0; 
 virtual void WhatsTheSpeed() =0; 
}

Теперь, что означает это ключевое слово delete?

Также использование абстрактного класса увеличивает размер кода. Я имею в виду, если мне не нужен абстрактный класс, всегда ли мне нужно его создавать?

1 ответ

Если вы пометите функцию как удаленную ( = delete), любое ее использование приведет к ошибке компиляции.

Что касается размера кода, на самом деле да, определение абстрактного класса сгенерирует больше кода для управления чисто виртуальным вызовом ( Объявление абстрактного класса (чисто виртуальный метод) существенно увеличит размер двоичного кода)

Лично я использую абстрактный класс, когда мне нужно определить общий базовый интерфейс, и я не хочу предоставлять какую-либо общую реализацию, и я хочу делегировать реализацию конкретным классам, которые будут наследоваться ( https://en.wikipedia.org/wiki/Polymorphism_(computer_science))

Другие вопросы по тегам