【问题标题】:Should delegate have a virtual destructor?委托应该有一个虚拟析构函数吗?
【发布时间】:2012-07-30 01:57:14
【问题描述】:
在delegate 模式中,将destuctor 设为虚拟是不是很好?
class MyClass
{
...
};
class MyClassDelegate
{
...
};
一方面,MyClassDelegate 类是一个接口,应该从其继承,但另一方面,它不应该通过 MyClassDelegate 指针指向 delete subclass
你怎么看?
【问题讨论】:
标签:
c++
design-patterns
inheritance
delegates
【解决方案1】:
如果您已经拥有其他虚拟函数,则将析构函数设为虚拟几乎不会带来任何开销。
【解决方案2】:
您可以考虑将其设置为非虚拟的受保护对象 - 然后您实际上是在强制执行并记录您无法使用这种指针删除对象的事实。更多讨论可以找到here
【解决方案3】:
如果您打算让类从 MyClassDelegate 继承,最好给它一个虚拟析构函数。
在您的初始设计中,您可能不打算将任何指向MyClassDelegate 的指针指向delete,但这种设计会不断发展,您的选择将限制其发展方式。这个特殊的限制很容易被忘记,并且导致的崩溃(或细微的错误)可能需要一段时间才能诊断出来。