Beginn der Verwendung von PC-Lint auf einer bestehenden Code-Basis (Angst und Angst).Destruktoren für C++ Interface-ähnliche Klassen
Eine Sache, die es beschwert sich über die folgenden:
class IBatch
{
public:
virtual void StartBatch() =0;
virtual int CommitBatch() =0;
};
die, wenn sie eine andere Klasse von dieser leitet es zu benutzen, wie eine Schnittstelle
base class 'IBatch' has no destructor
Also, die Frage: Wenn Sie erstellen Schnittstelle Klassen wie oben, enthalten Sie immer einen virtuellen Destruktor? Warum? (Ist es ein Stil oder ein Kodierungsfehler?)
EDIT: Sollte gesagt haben, dass ich nicht erwarte oder will Benutzer von IBatch zu zerstören, sie sind ein Verbraucher eines Dienstes nur, durch diese Schnittstelle zu einigen externe implementierende Klasse (wenn das einen Unterschied machen würde)
Wie bereits erwähnt, benötigen Sie einen virtuellen DTor. Nur als Randnotiz: COM-Schnittstellen beruhen stattdessen auf 'Release()', was eine virtuelle Methode ist, die zu einem "geeigneten" abgeleiteten DTor umleiten kann. – peterchen