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