【问题标题】:C++: Can the destructor be the only virtual function in a class?C++:析构函数可以是类中唯一的虚函数吗?
【发布时间】:2021-07-14 22:33:07
【问题描述】:

我读到只有当类中有虚函数时,才应将析构函数声明为虚函数。 这是一项要求还是可以不这样做?

【问题讨论】:

  • 你可以只拥有一个虚拟析构函数,但如果你没有任何其他虚拟函数,那就没有意义了。
  • @NathanOliver 如果你有一个基 A、派生 B 和一个指向 B 的 A* 智能指针会怎样。没有虚拟析构函数,B 特定的成员变量不会被正确销毁?
  • @JohnFilleau 你会用那个基指针做什么?没有虚函数。
  • 根据是否将纯虚拟声明(没有定义)视为函数或只是函数的虚拟槽,您可能会认为许多抽象基类(“接口”)具有单独的虚拟析构函数。
  • @NathanOliver:多态破坏本身就是一种有用的多态形式。您可以在某些作业的处理中使用对象,将它们自己注册到作业清理列表中,以便在作业完成时自动释放它们。其他代码通过它们的派生列表访问它们,只有清理列表包含一个基指针。

标签: c++ c++11 destructor virtual-destructor


【解决方案1】:

如果你打算在多态设置中使用你的类,你应该有虚拟析构函数。如果您不打算使用多态性和多态破坏(通过基类进行破坏),则不需要虚拟析构函数。

通常,当存在虚函数时,我们会在多态设置中使用类。没有虚函数会在使用类时强制使用强制转换。在这一点上,我建议只使用一个变体,它根本不需要虚拟析构函数。

话虽如此,如果您想要以多态方式公开的唯一操作是破坏,那么它在某些情况下仍然很有用。

【讨论】:

  • 感谢@Guillaume,我认为您提到的任何通用场景都适用。就像为查看此答案的读者提供的说明一样,还请查看 Ben Voigt 提供的 cmets。
  • @pasha 谢谢!我添加了一段关于破坏是目标操作的段落。
猜你喜欢
  • 2010-09-06
  • 1970-01-01
  • 2014-05-22
  • 2021-05-18
  • 2010-11-10
  • 2015-04-30
  • 2014-12-20
  • 2021-09-03
  • 1970-01-01
相关资源
最近更新 更多