Деструктор базового класса должен быть общедоступным виртуальным, общедоступным переопределением или защищенным невиртуальным
Деструктор базового класса должен быть общедоступным виртуальным, общедоступным переопределенным или защищенным невиртуальным.
Если деструктор базового класса не является общим виртуальным или общим переопределением, класс не может вести себя полиморфно для удаления производных объектов класса.
Если указатель на базовый класс ссылается на производный объект класса, и для удаления объекта используется указатель:
class Base {
public:
~Base() {}
};
class Derived: public Base {
public:
~Derived() {}
};
...
void func(Base* ptr) {
//ptr might point to a Base or Derived object
delete ptr;
}Если требуется запретить вызов деструктора производного класса через указатель базового класса, сделайте намерение явным, сделав деструктор защищенным. В противном случае может показаться, что возможность полиморфного удаления производных объектов класса не рассматривалась.
Средство проверки помечает базовые классы деструкторами, которые не являются общедоступными виртуальными, общедоступными переопределенными или защищенными невиртуальными.
Если вы ожидаете нарушения правила, но не видите его, обратитесь к разделу Нарушения стандартов кодирования не отображаются.
| Группа: Специальные функции-члены |
| Категория: Обязательно, Автоматизировано |