消除未使用的虚拟功能



是否可以从下面的简单代码中使MS链接器删除D::Unused函数?

class B {
virtual const char* Unused() = 0;
};
class D : public B {
const char* Unused() override;
};
const char* D::Unused() { return "this string is unused"; }
int main() {
D* d = new D;
delete d;
return 0;
}

我正在尝试使用 vs2017 +/OPT:REF /OPT:ICF /LTCG来实现这一点,但生成的二进制文件仍然包含"this string is unused"字符串的字节。

它可能无法删除此函数,因为此函数由class D的虚拟表引用。虚拟表class D由其构造函数和析构函数引用。

最新更新