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

spc*_*mrn 14 c++ abstract-class destructor pure-virtual

我认为虚拟一般就足够了.

有没有其他理由使它成为纯虚拟而不是强制派生类来实现自己的析构函数?我的意思是如果你在你的类的构造函数中分配一些东西,你应该强制你自己的析构函数 - 如果你的类是派生的.

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

还有一些用途吗?

Jam*_*ran 11

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

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

  • 标准12.4.7"析构函数可以声明为虚拟(10.3)或纯虚拟(10.4);如果在程序中创建该类或任何派生类的任何对象,则应定义析构函数.如果类具有基类使用虚拟析构函数,它的析构函数(无论是用户还是隐式声明)都是虚拟的." (4认同)
  • 你不强迫他们做任何事情.如果他们没有定义析构函数,编译器将为它们执行此操作. (2认同)

jpa*_*cek 11

如果你想要你的类抽象并且它没有纯虚函数 - 将它留给析构函数.

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

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