Nehmen wir an, ich habe eine Basisklasse X mit nur einer virtuellen Funktion.Virtueller Destruktor - wenn es notwendig ist
Ich erweitere es zu Y und überschreibe diese Funktion.
ich nicht bot expliziten destructor für X und Y.
Was während der Zerstörung in dieser Aussage geschieht.
Y y;
X *x= &y;
return;
.
.
.
X*x = new Y;
delete x;
return;
Welche Speicherleck verursachen ..
Weder? Ich sehe auch nicht, wie diese beiden Codeschnipsel allein mit virtuellen Destruktoren zusammenhängen? Sie müssten mindestens die Klassendefinitionen anzeigen. – UnholySheep
1) Kein Problem. x ist nur ein Zeiger, aber y wird zerstört und befreit alle Ressourcen von der Superklasse. 2) Ressourcen von Y gehen verloren, weil nur der Destruktor von X für eine Instanz von Y im Speicher aufgerufen wird -> möglicher Speicherleck (oder schlechter). – Youka
@ UnholySheep gibt es nichts Besonderes über die Klassendefinition. Ich habe die Aussage erwähnt. Der zweite scheint ein Speicherleck zu verursachen –