c++声明接口未提供虚析构函数的后果
这是一个比较低级的错误, 用C++模拟C#提供接口, 声明了纯虚函数, 看起来像这样:
|
|
这个接口看起来OK, 用起来也OK, 但是问题是拿到实例化后的对象通过接口形式的指针释放的时候, 没有调用到实际对象的析构函数, 像这样:
|
|
执行上面的语句, TestCase对象的析构函数未被调用到. 问题原因很简单, 就是c++虚析构的问题, 只不过声明接口的时候, 为了美观忘了接口也是个类, 没有添加虚析构函数. 修复后的代码如下:
|
|
这是一个比较低级的错误, 用C++模拟C#提供接口, 声明了纯虚函数, 看起来像这样:
|
|
这个接口看起来OK, 用起来也OK, 但是问题是拿到实例化后的对象通过接口形式的指针释放的时候, 没有调用到实际对象的析构函数, 像这样:
|
|
执行上面的语句, TestCase对象的析构函数未被调用到. 问题原因很简单, 就是c++虚析构的问题, 只不过声明接口的时候, 为了美观忘了接口也是个类, 没有添加虚析构函数. 修复后的代码如下:
|
|