消除未使用的虚拟功能

时间:2018-05-08 16:08:13

标签: c++ visual-c++ linker

是否可以通过下面的简单代码使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"字符串的字节。

1 个答案:

答案 0 :(得分:0)

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