可能的重复:
何时使用虚拟析构函数?
如果一个类(具有虚函数)及其继承类的所有数据成员都是非指针类型(意味着它不能保存任何动态内存),是否需要将析构函数声明为虚函数?
例子
class base {
int x;
public:
virtual void fn(){}
};
class der: public base {
int y;
public:
void fn(){}
};
Run Code Online (Sandbox Code Playgroud)
这里我们需要一个虚拟析构函数吗?
不,这并不总是必要的。这只是一个经验法则,因此并不总是适用。
真正的规则说:
virtual当要通过基类指针删除派生类的对象时,必须声明析构函数。
否则,通过基类指针删除派生类对象会调用未定义的行为。(最可能的结果是只调用基类的析构函数。)
当然,这条规则对于新手来说是相当麻烦的,因此更简单的经验法则几乎总是正确的。这是非常可能的,你正在管理一个多态类层次结构,通过基类指针动态创建的派生类对象,这是非常不可能的,你非多态类层次做到这一点。
| 归档时间: |
|
| 查看次数: |
5441 次 |
| 最近记录: |