Вопрос:

Если в С++ деструктор базового класса не объявлен виртуальным, ...

Ответ:

Решение:

В C++ при наследовании и удалении объекта через указатель на базовый класс, если деструктор базового класса не объявлен как virtual, будет вызван только деструктор базового класса. Это может привести к утечке памяти, так как деструкторы производных классов не будут вызваны.

  • Произойдет ошибка компиляции — неверно. Компиляция пройдет успешно.
  • Будет вызван только деструктор базового класса — верно. Это основной эффект не виртуального деструктора при полиморфном удалении.
  • Все деструкторы все равно вызовутся корректно — неверно. Корректный вызов всех деструкторов происходит только при наличии виртуального деструктора.
  • Утечка памяти будет невозможна — неверно. Отсутствие виртуального деструктора как раз и приводит к возможной утечке памяти.

Ответ: будет вызван только деструктор базового класса.

Подать жалобу Правообладателю