Sobes.tech
Junior — Senior
58

Ошибка компиляции при применении protected‑наследования

Условие задачи

Рассмотрим следующий пример: базовый класс B объявлен с виртуальным деструктором, а класс Child наследует его с модификатором protected. В функции checkChildB создаётся объект Child, но указатель объявлен как B*. Нужно понять, почему код не компилируется и в чём заключается проблема использования protected‑наследования в таком случае.

class B {
public:
    virtual ~B() = default;
};

class Child : protected B {
};

void checkChildB() {
    B* b = new Child; // ошибка компиляции
}