Betrachten Sie diese zwei Klassen in C++ 11:Wie kann ich die Zerstörung eines übergeordneten Instanzmitglieds sicherstellen?
class A
{
ArbitraryClass someInstance;
};
class B : public A
{
};
Und ich B
als solche betrachten:
B *foo = new B;
delete foo;
Wie ich verstehe, die implizite destructor von A
wird hier nicht genannt werden.
Wird someInstance
immer noch unter diesen Umständen zerstört, weil es als Mitglied von B
"assoziiert" wird? Oder muss ich einen virtuellen Destruktor unter A
deklarieren, um automatisch die Zerstörung des Mitglieds auszulösen?
"Wie ich verstehe, wird der implizite Destruktor von A hier nicht aufgerufen werden." Warum denkst du, dass? Hast Du es versucht? Ohne virtuelle Destruktoren wird der Destruktor des statischen Variablentyps des Objekts zusammen mit allen übergeordneten Typen aufgerufen. Bei einem virtuellen Destruktor wird der Destruktor des dynamischen Objekttyps mit allen übergeordneten Typen aufgerufen. – xaxxon
Gute Bücher: https://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list – Galik
Ich denke, du bist verwirrt.Ihre Frage würde mehr Sinn ergeben (als ein Punkt des Verständnisses, nicht der Verwirrung), wenn "someInstance" ein Mitglied von "B" und "foo" "A *" wäre. – WhozCraig