基类的虚析构函数 c++

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;

请尝试此链接:https://dev59.com/IHRB5IYBdhLWcg3w77on#15903538 - Tunvir Rahman Tusher
2个回答

2
如果你没有为Derived提供析构函数,那么一个自动创建的析构函数就会被生成。这个自动生成的析构函数会覆盖Base中的析构函数,在你删除foo时调用。这个自动生成的析构函数相当于以下内容:
Class Derived : public Base {
  ~Derived() { } // this is what you get if you don't provide your own.
}

所有的析构函数,无论是自动生成的还是手动定义的,都会自动调用类成员的析构函数以及基类的析构函数。因此,所有的资源都会被很好地清理。


所以在Derived类中不需要编写~Derived() { },因为它会自动调用,并且没有特定的操作,对吗? - user1621727

1

不会发生内存泄漏,因为Derived将获得其隐式虚析构函数。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接