PVD – Bereitstellen eines virtuellen Destruktors

Aus RAD Studio
Wechseln zu: Navigation, Suche

Nach oben zu C++-Audits


Beschreibung

PVD ermittelt Klassen mit virtuellen Methoden, die nicht virtuelle Destruktoren oder keine Destruktoren haben.

Sie sollten einen Destruktor als virtuell deklarieren, wenn die Klasse mindestens eine virtuelle Funktion hat. Dadurch wird angezeigt, dass eine Klasse als Interface für abgeleitete Klassen dienen soll, und wenn dem so ist, kann ein Objekt einer abgeleiteten Klasse durch einen Zeiger auf die Basisklasse freigegeben werden.

Wäre der Destruktor der Basisklasse nicht "virtual", würde der Destruktor der abgeleiteten Klasse nicht aufgerufen werden – mit vermutlich negativen Auswirkungen, wie z.B. dass Ressourcen der abgeleiteten Klasse nicht freigegeben werden.

Falsch:

 class Base{
 public:
   virtual method() = 0;
 };

Richtig:

 class Base{
 public:
   virtual method() = 0;
   virtual ~Base(){};
 };

Siehe auch