删除继承的类型

时间:2011-07-13 06:16:37

标签: c++ inheritance

我有2个班级:

class A
{
public:
char * x;
char * y;
char * z;
A();
~A();
}

class B: public A
{
public:
char * o;
B();
~B();
}

我想在B类的析构函数中删除[] x,y和z(是的,A的构造函数正确地分配了x,y和z)。代码将编译正常,但在执行时它将崩溃。这些属性是公共的,所以继承的特性应该可以为我释放一些记忆,对吗?

3 个答案:

答案 0 :(得分:1)

根据您的实际代码,它可能无法在o上调用删除,并且可能会重复删除xyz

您应该在基类(对于基类成员)和派生类(对于派生类成员)中正确实现销毁。让涓滴析构函数行为处理基类破坏。

http://www.parashift.com/c++-faq-lite/dtors.html#faq-11.12

  

当我编写派生类的析构函数时,是否需要显式调用基类的析构函数?

     
      
  • 无...   派生类的析构函数(无论是否显式定义)都会自动调用基类子对象的析构函数
  •   

此外,根据您的代码的使用方式,您可能还需要将析构函数设置为虚拟。

http://www.parashift.com/c++-faq-lite/virtual-functions.html#faq-20.7

  

我的析构函数什么时候应该是虚拟的?

     
      
  • 当有人通过基类指针删除派生类对象时。
  •   

答案 1 :(得分:0)

你应该能够,这是一个好主意是另一个问题。

你说你的代码崩溃了,但你没有给出任何证据,因为你在B的析构函数中删除了A的mmeber变量。事实上,如果我不得不猜测我会说现金的原因是缺少A和B中的复制构造函数和赋值运算符(所谓的“三规则”,谷歌吧)。

如果您的程序崩溃,那么发布崩溃的代码可能是个好主意。我认为这会提高你获得有用答案的机会。

答案 2 :(得分:0)

我调用了A的构造函数/析构函数以及B,因此导致我编写代码的几个问题,特别是严重的内存泄漏。感谢所有帮助人员,我只是因为有人告诉我onle构造函数是遗传的而感到困惑。