Есть ли какой-нибудь вред в переопределении "пустого" виртуального деструктора другим?

Скажем, я наследую от класса с "пустым" виртуальным деструктором:

// base.h
class Base {
 public:
  // ...
  virtual ~Base();
};

// base.cc
Base::~Base() {}

Если мне не нужно выполнять какую-либо явную работу в деструкторе производного класса, есть ли вред добавлению еще одного "пустого", такого как bleow?

// derived.h
class Derived : public Base {
 public:
  // ...
  ~Derived() override;
};

// derived.cc
Derived::~Derived() {}

Ответ на этот вопрос говорит, что это не обязательно, но есть ли вред?

1 ответ

есть ли вред добавлению еще одного "пустого", такого как bleow?

Каждая единица перевода, которая включает конструктор Derived придется сгенерировать внеплановую копию встроенного деструктора, чтобы поместить его адрес в виртуальную таблицу Derived, Компоновщик отбрасывает дублирующиеся виртуальные таблицы, однако, оставшиеся вне строки копии деструктора остаются вместе с его отладочной информацией.

Отключение деструктора предотвращает дублирование кода и уменьшает размер ваших объектных файлов, исполняемых файлов и разделяемых библиотек.

Другие вопросы по тегам