C ++ - 子类析构函数是否应显式调用基类析构函数?

时间:2010-10-21 13:26:05

标签: c++

  

可能重复:
  Do I need to explicitly call the base virtual destructor?

大家好,

我想知道子类析构函数是否应该显式调用基类析构函数。我的回答是否定的。

例如,

class A
{
public:
   A() {...}
   virtual ~A() {...}
protected:
   ...
private:
   ...

};


class B: public A
{
public:
   B() {...}
   virtual ~B() 
   {
     ...
     // should we call destructor of A?
   }
protected:
   ...
private:
   ...

};

谢谢

2 个答案:

答案 0 :(得分:5)

不,绝不应该显式调用析构函数(在子类中或其他情况下,几乎从不),编译器会为您处理。

您可能希望明确调用它的唯一情况是您正在滚动自己的内存管理,并且您实际上是在显式释放内存(而不是删除一堆对象)。

答案 1 :(得分:3)

你的猜测是正确的。 无需显式调用基类析构函数。