Memory Leak mit Intel Compiler, mit GCC aber nicht...
-
CStoll schrieb:
Könnte es sein, daß wenn ich die Löschung über die <abstract> Klasse vornehme, die Polymorphie nicht per Standard definiert ist... habe gerade gesehen, daß mein <derive> DTOR nicht aufgerufen wird...
Das kann nicht nur sein, das ist so. Und um das zu lösen, muß der Destruktor der Basisklasse virtuell definiert werden.
Klasse, Danke CStoll !! Das wars... welch ein "dämlicher" Fehler... gcc hatte mich wohl verstanden, gg
-
Normalerweise gibst für diese Fehler meistens Compilerwarnung o_O
Hab zwar daran gedacht, aber dachte der Kompiler würde meckern xd
-
nt
-
Aprollo schrieb:
Normalerweise gibst für diese Fehler meistens Compilerwarnung o_O
Hab zwar daran gedacht, aber dachte der Kompiler würde meckern xdNun, weder der Intel noch der GCC haben gemeckert... das liegt wohl daran, daß ich zwar in der Basisklasse ein "virtuell" vor dem Destruktor hatte, aber auch bei der abgeleiteten Basisklasse
Nachdem ich die "virtuell" Deklarationen in den abgeleiteten Destrokturen entfernt hatte, verschwand mein Memory Leak... es war wohl einfach zuviel des Guten :S
-
CStoll schrieb:
Und um das zu lösen, muß der Destruktor der Basisklasse virtuell definiert werden.
Nun, weder der Intel noch der GCC haben gemeckert... das liegt wohl daran, daß ich zwar in der Basisklasse ein "virtuell" vor dem Destruktor hatte, aber auch bei der abgeleiteten Basisklasse
Nachdem ich die "virtuell" Deklarationen in den abgeleiteten Destrokturen entfernt hatte, verschwand mein Memory Leak... es war wohl einfach zuviel des Guten :SWenn in eine Klassen virtuelle Methoden deklariert sind aber keine virtuellen Destuktor, geben Mingw und VC++ Warnungen aus, weil man zwar die Methode richtig dispatchen kann, aber eine delete anweisung nicht.
2 mal virtuelle sollte nicht der Fehler sein o_O
-
Winn schrieb:
Aprollo schrieb:
Normalerweise gibst für diese Fehler meistens Compilerwarnung o_O
Hab zwar daran gedacht, aber dachte der Kompiler würde meckern xdNun, weder der Intel noch der GCC haben gemeckert... das liegt wohl daran, daß ich zwar in der Basisklasse ein "virtuell" vor dem Destruktor hatte, aber auch bei der abgeleiteten Basisklasse
Nachdem ich die "virtuell" Deklarationen in den abgeleiteten Destrokturen entfernt hatte, verschwand mein Memory Leak... es war wohl einfach zuviel des Guten :SIn deinem oben gegebenen Beispiel war der Basis-Dtor nicht virtuell (und ob du den abgeleiteten Dtor virtual definierst, ist dann letztendlich egal)
-
CStoll schrieb:
In deinem oben gegebenen Beispiel war der Basis-Dtor nicht virtuell (und ob du den abgeleiteten Dtor virtual definierst, ist dann letztendlich egal)
Das stimmt, war auch nur ein Code-Snap... in meinem Produktions-Code war es doppelt "virtuell", es gab auch keine Warnings... ich kann Euch auch nur wiedergeben, was mir widerfahren ist. GCC compilierte den Code ja einwandfrei, während der Intel Compiler mit dem Doppelten-Lottchen spazieren fuhr...
-
intelc und vc machen bei virtuell manchmal durchaus seltsamme dinge.
-
rapsoo schrieb:
intelc und vc machen bei virtuell manchmal durchaus seltsamme dinge.
schmarren.
-
hustbaer schrieb:
rapsoo schrieb:
intelc und vc machen bei virtuell manchmal durchaus seltsamme dinge.
schmarren.
Ja, das ist dann das Resultat.