抽象类的析构函数应该是纯虚拟的吗?

时间:2010-08-17 13:45:48

标签: c++ abstract-class destructor pure-virtual

我认为虚拟就足够了。

还有另一个理由让它变成虚拟虚拟而不是强制派生类来实现自己的析构函数吗?我的意思是如果你在类的构造函数中分配了一些东西,你应该强迫你自己的析构函数 - 如果你的是否派生了类。

不算作我已经知道的答案:如果你想让你的类抽象而且它没有纯虚函数 - 把它留给析构函数。

还有更多用途吗?

4 个答案:

答案 0 :(得分:11)

没有。如果基类分配任何东西,那么释放它是负责任的。

此外,如果派生类没有分配任何东西,强迫他们写一个虚拟的dtor是没有意义的。

答案 1 :(得分:11)

  

如果你想要你的课抽象而且它   没有纯虚函数 - 离开   它是析构函数。

实际上,我认为还有更多。所有纯虚析构函数都是,使整个类抽象化。您必须为纯虚拟析构函数以及非纯虚拟析构函数提供实现,派生类的析构函数是虚拟的,仅使用虚拟析构函数等。

基本上,如果一个类已经有一些纯虚函数,它的行为就等同于虚拟和纯虚析构函数。

答案 2 :(得分:1)

理想情况下,语言应该有一种方法可以确保(隐式或不是)析构函数在抽象类中是虚拟的,而不必定义它或使其纯粹。但它没有。

所以选择是:要么使它成为纯粹的,要么在每个派生类中定义它的负担,要么不使它,并且负担在抽象类中定义它。后者的工作量较少,代码也较短,所以我会选择它。

答案 3 :(得分:-2)

如果你的抽象类是一个纯粹的接口,没有数据成员,你可以将dtor变成纯虚拟的。我更喜欢自己,因为我已经看到很多热门程序员忘记创建一个虚拟析构函数:即使他们编写包含虚方法的派生类。 所以我会这样做纯粹是为了尽量减少在路上的维护问题。