【发布时间】:2012-10-11 06:55:00
【问题描述】:
当我尝试从第三方 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 中搜索了错误消息,但没有找到此错误的任何实例。
那么,如果我无法修改供应商代码的黑匣子部分,我有哪些选择?
这是在制作过程中失败的代码:
delete pData->unit;
【问题讨论】:
-
所以这个类是用来继承的,但没有虚拟析构函数?我会向制作那个图书馆的人抱怨。
-
警告有点温和。通过指向没有虚拟析构函数的基类型的指针删除派生类型的对象会导致未定义的行为。没有“可能”。
-
@PeteBecker 至少 g++ 4.8 会发出此警告,即使我通过指向派生类的指针删除。这将是安全的(AFAIK),因此“可能”在这里也是错误的(根本不应该生成警告)。我猜g++无法区分这两种情况。
-
@PeterBecker 在我的情况下,它当然可以是进一步的派生类(在这种情况下警告是正确的),但这种情况(恕我直言)永远不能被排除。
标签: c++ inheritance destructor