我想知道是否有人可以帮助我了解虚拟析构函数的需求。
我用一个主对话框编写了一个应用程序,从这个主对话框中将生成其他派生的对话框。
因此,所有这些派生的对话框都需要虚拟析构函数吗?或只是主对话框?
提前谢谢
答案 0 :(得分:2)
通常,如果一个类被设计为用作基类,
它应该有一个虚拟析构函数。唯一的例外是
提供typedef
之类的便利课程(参见
例如std::exception
)。这些最安全的解决方案
是为了使析构函数受到保护,但实际上是他们的
语义是这样的,没有人创建指向它们的指针
无论如何,这个问题在实践中不会发生。
答案 1 :(得分:1)
当您打算以多态方式使用这些对象时,需要虚拟析构函数。对于基类析构函数来说,virtual
就足够了;派生的析构函数也将隐式virtual
。
在你的情况下,看起来你不会多态地使用对话框,所以也许根本不需要虚拟析构函数。
答案 2 :(得分:-1)
如果要在链中调用所有析构函数,则必须始终创建虚拟析构函数。即使一个人是空的。
你错过了在某个时候创建一个虚拟析构函数C ++将创建一个非虚拟析构函数,因此将破坏所有析构函数链。
对于非虚拟析构函数,将在您明确删除的类指针上调用它们。如果您使用虚拟 - 将始终调用所有链。
答案 3 :(得分:-1)
简单的规则是“只要在类中有虚函数,就需要虚拟析构函数。”
一旦你在一个基类虚拟中创建了一个函数,它就会变成所有派生类的虚函数,无论你是否标记它。因此,如果你让主对话框析构函数为虚拟,那么你已经为所有其他人完成了这项工作[虽然我发现在查看类声明时立即看到函数是虚拟的很有用,并且不必向上移动几层类弄清楚它是否是]。