2012-08-01 85 views
1

delegate模式是否很好使destuctor虚拟?代表应该有一个虚拟析构函数吗?

class MyClass 
{ 
    ... 
}; 

class MyClassDelegate 
{ 
    ... 
}; 

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

你认为应该deletesubclass

回答

5

你可以考虑将它保护为非虚拟的 - 那么你实际上是强制执行和记录你不能使用这种指针删除一个对象的事实。可以找到更多的讨论here

0

如果已经具有其他虚拟函数,则析构函数几乎不会引起开销。

+0

我明白,但问题是关于设计,而不是性能 – Andrew 2012-08-01 07:48:13

0

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

在您的初始设计中,您可能无法计划到delete指向MyClassDelegate的任何指针,但是此设计将会发展,您的选择将对此演变发展施加约束。这个特定的约束很容易被遗忘,而结果可能需要一段时间才能诊断出来的崩溃(或细微的错误)。

相关问题