1

可能重复:
何时使用虚拟析构函数?

何时使用虚拟析构函数可能重复 ?

我想知道是否有人可以帮助我了解虚拟析构函数的需求。

我已经编写了一个带有主对话框的应用程序,并且从这个主对话框中将产生其他派生对话框。

因此,所有这些派生对话框都需要虚拟析构函数吗?还是只是主对话框?

先感谢您

4

4 回答 4

2

一般来说,如果一个类被设计为用作基类,它应该有一个虚拟析构函数。唯一的例外是提供类似typedef(参见示例std::exception)的便利类。最安全的解决方案是使析构函数受到保护,但实际上,它们的语义使得无论如何都没有人创建指向它们的指针,因此在实践中不会出现问题。

于 2013-02-01T10:48:59.003 回答
1

当您要以多态方式使用这些对象时,需要虚拟析构函数。基类析构函数就足够了virtual;派生的析构函数也将是隐式virtual的。

在您的情况下,您似乎不会以多态方式使用对话框,因此您可能根本不需要虚拟析构函数。

于 2013-02-01T10:47:14.040 回答
-1

如果您希望在链中调用所有析构函数,则必须始终创建一个虚拟析构函数。哪怕一个是空的。

如果您错过了在某些时候创建虚拟析构函数,C++ 将创建一个非虚拟析构函数,因此会破坏所有析构函数链。

对于非虚拟析构函数,它们将在您显式删除的类指针上调用。如果您使用虚拟 - 将始终调用所有链。

于 2013-02-01T10:47:00.303 回答
-1

简单的规则是“只要类中有虚函数,就需要一个虚析构函数”。

一旦你在基类中创建了一个函数,它对于所有派生类都将变为虚拟,无论你是否将其标记为虚拟。因此,如果您将主对话框析构函数设为虚拟,那么您已经为所有其他人完成了这项工作[尽管我发现在查看类声明时立即看到一个函数是虚拟的很有用,而不必遍历几层类弄清楚它是否存在]。

于 2013-02-01T10:47:10.297 回答