У меня возникли проблемы с пониманием причины сбоя в следующем коде:
class A {
public:
virtual ~A() { goo(); }
void goo() { absFoo(); }
virtual void absFoo() = 0;
};
class B : public A {
public:
void absFoo() { cout << "In B \n"; }
};
int main()
{
B b1;
b1.goo();
}
Основные принты "In B", как и ожидалось, но в конце, когда он падает, я не могу его отлаживать, компилятор выводит странное сообщение.
Поэтому мой вопрос: когда деструктор A называет "goo()", делает ли "absFoo()", сбой, потому что мы имеем в виду абстрактную функцию?
Или компилятор действительно ищет определение в производных классах? (И его больше нет, потому что он был разрушен заранее, поэтому он сбой)
Я знаю, что если бы мы вызвали "absFoo()" непосредственно из деструктора, причиной была бы абстрактная функция. Но поскольку здесь это внешняя функция, вызывающая "absFoo()" У меня возникли проблемы с пониманием реальной причины.