3

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

编译器编译下面的代码,但会不会有内存泄漏或任何问题?

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;
4

2 回答 2

2

如果您不为 提供析构函数Derived,则会自动创建一个析构函数。自动创建的析构函数会覆盖 in 中的析构函数Base,因此在您 delete 时会调用它foo。自动创建的析构函数等价于:

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

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

于 2013-04-28T17:51:02.127 回答
1

不,不会有内存泄漏,因为Derived会得到它的隐式虚拟析构函数。

于 2013-04-28T17:47:47.537 回答