有没有办法告诉gcc它编译的抽象类不需要虚拟析构函数(比如COM-objects永远不会有)?例如,nsISupports总是抱怨缺少虚拟析构函数。关闭警告无济于事,因为我可能有非COM类,我想要这个警告。
因此不推荐使用__attribute __((com_interface))并仅更改vtable布局。还有另一个__attribute__,我可以告诉编译器我不想被警告这个类上缺少的析构函数吗?
答案 0 :(得分:1)
缺少虚拟dtor警告是有原因的 - 主要是因为它是一个调试的噩梦,特别是在一个庞大而复杂的代码库中 你可能有一个非常具体的理由这样做,但问问自己,如果一个类被重构,使得它的用法在以后更改会发生什么?
答案 1 :(得分:1)
我认为您应该重新考虑禁用此警告。这是有原因的。今天没有在你的课程中放置虚拟析构函数可能是正确的,但你无法准确预测将来如何使用你的课程。
课程使用方式的细微变化可能导致下一位开发人员将头发拉出数小时试图追踪资源泄漏。让那个人受宠,现在让析构函数变得虚拟。
你也可以问自己
通过将其设为非虚拟
我可以获得什么
你提到了一个抽象类,所以我假设它至少有一个虚函数。因此,使析构函数虚拟化不会向对象添加v表,它只是将其扩展为包含另一个成员。
我无法看到任何真正的收获使这个非虚拟。只有问题。
答案 2 :(得分:0)
您可能想要使用一对diagnostic pragmas。如果失败,#pragma GCC system_header
会在给定文件中禁用所有警告。