基类'虚拟析构函数c ++

时间:2013-04-28 17:46:16

标签: c++ polymorphism virtual-destructor

我对虚拟析构函数感到困惑。我已经阅读了很多问题和解释,但我仍然不明白,如果有来自基类的派生类,我是否需要实现自己的析构函数,即使它没有任何特殊操作。

编译器编译下面的代码,但是会出现任何内存泄漏或任何问题吗?

Class Base{
public:
virtual ~Base(){}
};

Class Derived : public Base{
// do i need a special destructor here for Derived ?
}

Base *foo;
foo = new Derived;
delete foo;

2 个答案:

答案 0 :(得分:2)

如果您没有为Derived提供析构函数,则会自动创建一个析构函数。自动创建的析构函数会覆盖Base中的析构函数,因此在删除foo时会调用它。自动创建的析构函数将等同于:

Class Derived : public Base {
  ~Derived() { } // this is what you get if you don't provide your own.
}

所有析构函数,无论是否自动创建,都将自动调用类的所有成员的析构函数和基类的析构函数。所以一切都得到了很好的清理。

答案 1 :(得分:1)

不存在内存泄漏,因为Derived将获得它的隐式虚析构函数。