Устранение неиспользуемых виртуальных функций - PullRequest
0 голосов
/ 08 мая 2018

Можно ли заставить MS linker drop 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 голосов
/ 08 мая 2018

Вероятно, эта функция не может быть отброшена, так как на эту функцию ссылается виртуальная таблица class D. И виртуальная таблица class D называется ее конструктором и деструктором.

...