Оператор удаления в абстрактном классе, как это работает
Как это работает
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))