委托应该有一个虚拟的析构函数吗?

时间:2012-08-01 07:43:38

标签: c++ design-patterns inheritance delegates

delegate模式中,使destuctor虚拟?

是好的
class MyClass
{
    ...
};

class MyClassDelegate
{
    ...
};

一方面,类MyClassDelegate是一个接口,应该是继承的,但另一方面它不应该通过delete指针subclass MyClassDelegate

您怎么看?

3 个答案:

答案 0 :(得分:5)

您可以考虑将其保护为非虚拟 - 然后您实际上正在强制执行并记录您无法使用该类指针删除对象这一事实。可以找到更多的讨论here

答案 1 :(得分:0)

如果您已经拥有其他虚拟函数,则将析构函数设置为虚拟化几乎不会产生任何开销。

答案 2 :(得分:0)

如果您计划让类继承自MyClassDelegate,最好给它一个虚拟析构函数。

在您的初始设计中,您可能不会计划delete指向MyClassDelegate的任何指针,但此设计会不断发展,您的选择将限制其演变方式。这个特殊约束很容易被遗忘,并且导致崩溃(或细微错误)可能需要一段时间来诊断。