Деструктор базового класса должен быть общедоступным виртуальным, общедоступным или защищенным невирусным
Деструктор базового класса должен быть общедоступным виртуальным, общедоступным или защищенным невирусным.
Если деструктор базового класса не является общим виртуальным или общим переопределением, класс не может вести себя полиморфно для удаления производных объектов класса.
Если указатель на базовый класс ссылается на производный объект класса, и вы используете указатель для удаления объекта:
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; }
Если вы хотите предотвратить вызов производного деструктора классов через указатель базового класса, сделайте свой умысел явным, сделав деструктор защищенным. В противном случае может показаться, что возможность полиморфного делеции объектов производных классов не рассматривалась.
Шашка помечает базовые классы деструкторами, которые не являются общедоступными виртуальными, переопределяются или защищаются невирусными.
Если вы ожидаете нарушения правил, но не видите его, обратитесь к разделу «Стандартные нарушения кодирования не отображаются».
Группа: Специальные функции представителей |
Категория: Необходимый, Автоматизированный |