Есть ли какой-нибудь вред в переопределении "пустого" виртуального деструктора другим?
Скажем, я наследую от класса с "пустым" виртуальным деструктором:
// 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
, Компоновщик отбрасывает дублирующиеся виртуальные таблицы, однако, оставшиеся вне строки копии деструктора остаются вместе с его отладочной информацией.
Отключение деструктора предотвращает дублирование кода и уменьшает размер ваших объектных файлов, исполняемых файлов и разделяемых библиотек.