我有一个基类A和派生类B:
class A
{
public:
virtual f();
};
class B : public A
{
public:
B()
{
p = new char [100];
}
~B()
{
delete [] p;
}
f();
private:
char *p;
};
对于任何原因析构函数没有被调用 - 为什么? 我不明白这一点。
你的基类需要一个虚析构函数。 否则派生类的析构函数将不会被调用,如果仅使用类型A *的一个指针。
加
virtual ~A() {};
为A级。
A类应该有一个虚析构函数。 不这样做,派生类的析构函数不会被调用。
试试这个:
class A
{
public:
virtual ~A() {}
virtual f();
};
class B : public A
{
public:
B()
{
p = new char [100];
}
virtual ~B() // virtual keywork optional but occasionally helpful for self documentation.
{
delete [] p;
}
f();
private:
char *p;
};
如果变量是A型的它没有虚析构函数,所以它不会看实际的运行时类型的对象,以确定它需要调用desstructor
添加一个空的析构函数至A
虚拟〜A(){}
这应该修复它。
一般来说,你需要这样做上可能被用作基类中的任何类。