Warum ist mein Destruktor nie aufgerufen wird?
Ich habe eine Basisklasse und Einer abgeleiteten Klasse B:
class A
{
public:
virtual f();
};
class B : public A
{
public:
B()
{
p = new char [100];
}
~B()
{
delete [] p;
}
f();
private:
char *p;
};
Gründen, die der Destruktor nie aufgerufen - warum? Ich verstehe nicht dieses.
- Obwohl jeder schon herausgefunden, was das problem ist(Wie es ist eine FAQ in C++), habe ich noch vorschlagen, sollten Sie zeigen den code, wie du die Klasse B.(Wenn Sie diese Art der Nutzung: B* p = new B(); delete p; und der Destruktor nie aufgerufen wird, dann sollte es ganz anderes problem.)
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ihre Basis-Klasse muss einen virtuellen Destruktor. Ansonsten ist der Destruktor der abgeleiteten Klasse nicht aufgerufen werden, wenn nur ein Zeiger vom Typ A* verwendet.
Hinzufügen
Klasse A.
Klasse A sollte einen virtuellen Destruktor. Ohne das ableiten der Klasse Destruktoren nicht aufgerufen werden.
versuchen Sie dies:
Wenn die variable vom Typ A es keinen virtuellen Destruktor und so sehen Sie nicht mit der tatsächlichen Laufzeit-Typ des Objekts, um zu bestimmen, die es braucht, um die desstructor
Fügen Sie einen leeren Destruktor zu Einem
virtual ~A() {}
und das sollte es beheben.
Im Allgemeinen müssen Sie dies tun, für jede Klasse, die möglicherweise sein kann als Basisklasse verwendet.