有没有办法告诉 gcc 它正在编译的抽象类不需要虚拟析构函数(就像 COM 对象从来没有一样)?例如 nsISupports 总是抱怨缺少虚拟析构函数。关闭警告无济于事,因为我可能有非 COM 类,我想要这个警告。
因此 __attribute__((com_interface)) 已被弃用,仅更改了 vtable 布局。是否还有另一个 __attribute__ 可以告诉编译器我不想被警告该类缺少析构函数?
有没有办法告诉 gcc 它正在编译的抽象类不需要虚拟析构函数(就像 COM 对象从来没有一样)?例如 nsISupports 总是抱怨缺少虚拟析构函数。关闭警告无济于事,因为我可能有非 COM 类,我想要这个警告。
因此 __attribute__((com_interface)) 已被弃用,仅更改了 vtable 布局。是否还有另一个 __attribute__ 可以告诉编译器我不想被警告该类缺少析构函数?
缺少虚拟 dtor 警告是有原因的 - 主要是因为它是追踪调试的噩梦,尤其是在大型和复杂的代码库中
您可能有一个非常具体的原因这样做,但问问自己,如果一个类被重构会发生什么这样它的用法会在以后发生变化?
我认为您应该重新考虑禁用此警告。它的存在是有原因的。今天不在您的类中放置虚拟析构函数可能是正确的,但您无法准确预测您的类将来将如何使用。
类使用方式的细微变化可能会导致下一个开发人员花费数小时来寻找资源泄漏。帮那个人一个忙,现在让析构函数成为虚拟的。
你也可能想问问自己
通过使其非虚拟化我可以获得什么
你提到有一个抽象类,所以我假设它至少有一个虚拟函数。因此,使析构函数为虚拟不会向对象添加 v-table,它只是将其扩展为包含另一个成员。
我看不出使这个非虚拟化有什么真正的好处。只有问题。
您可能想要使用一对诊断编译指示。否则,#pragma GCC system_header
将禁用给定文件中的所有警告。