为了消除死代码,我使用GCC的编译器选项-fdata-sections -ffunction-sections
和链接器选项-Wl,--gc-sections
。除了虚拟类的未使用方法的情况外,它的工作正常。
例如,
class A {
public:
virtual void f();
};
class B: public A {
public:
void unused();
};
class C {
public:
void unused();
};
GCC保留B::unused()
,但删除C::unused()
。
如何强制GCC删除未使用的虚拟类方法?
UPD。我用Google搜索-fvtable-gc
选项,但它不起作用。
答案 0 :(得分:0)
您无法删除类的虚方法,因为您永远不知道何时可以通过派生类对象的指针调用 。