当我尝试从第三方SDK编译一些代码时,我收到以下错误.
*Description Resource Path Location Type deleting object of polymorphic class type ‘vendor_sys::vendorCode’ which has non-virtual destructor might cause undefined behavIoUr [-Werror=delete-non-virtual-dtor] PnServer.cpp /PCounter line 467 C/C++ Problem*
我不知道它是否可以满足这种条件,只有部分了解供应商的SDK,其中大部分重物在dll或库对象中完成.
我的构建环境是使用gpp的Eclipse Juno.
我在Google中搜索了错误消息,没有发现任何此错误的实例.
所以,如果我不能修改供应商代码的黑盒子部分,我的选择是什么?
这是在make过程中失败的代码:
delete pData->unit;
解决方法
坏消息,恐怕.你不应该使用该类作为基类.太多的限制和陷阱.你可能会放弃它,但为什么要冒险呢?向图书馆供应商提交错误报告.
如果您不需要多态指针,请在类中包含该类型的对象,并委托您要继承的成员函数.
class my_class {
private:
evil_class evil;
public:
virtual ~my_class() {/* stuff */}
virtual int member() { return evil.member(); }
};