У меня есть три классаC++ виртуальных определений деструкторов
class A {
// pure virtual funcs and member vars
virtual ~A();
}
class B : public A {
// some more pure virtual funcs
virtual ~B();
}
class C : public B {
// concrete implementations
~C() {}
}
В настоящее время это не компилируется с «неопределенной ссылкой на` TypeInfo»ошибки (~ B() не определен, легко поправимо), однако я задается вопросом, нужно ли просто определять «virtual ~ B {}» или что C должен быть виртуальным и определенным, поэтому вызовы ~ B отправляются в ~ C?
** - 1 ** Это ** не настоящий код **. Мы не знаем, что еще вы пропустили, помимо упущений, которые мешают ему компилировать. –
Чистые виртуальные функции должны заканчиваться на a = 0; 'virtual ~ A() = 0;' –
У вас ошибка компоновщика, а не ошибка компилятора. Кроме того, все деструкторы в вашем коде являются виртуальными; переопределяющие функции неявно виртуальны. –