Понятное дело что такой вызов не приветствуеться. Но, проведем эксперимент на разных компиляторах.
// test.cpp
struct A
{
~A() { F(); }
virtual void F() = 0;
};
struct B: A
{
void F() {}
};
int main()
{
B b;
return 0;
}
GCC 3.2:
$ g++ test.cpp
test.cpp: In destructor 'A::~A()';
test.cpp:3: abstract virtual 'virtual void A::F()' called from destructor
Ладно, это хорошо что это ошибка.
Comeau (Test Drive):
"ComeauTest.c", line 3: warning: call of pure virtual function
~A() { F(); }
^
Ага, а тут это всего лишь сообщение. Но дальше больше. VC 7.0. Компилируем, все хорошо (может какую то галочку забыл нажать в свойствах компиляции?). А вот линкер ругаеться, говорит:
test.obj : error LNK2001: unresolved external symbol "public: virtual void __thiscall A::F(void)" (?F@A@@$$FUAEXXZ)
Спрашиваеться, а почему линкер ищет эту
абстрактную функцию? Я понял бы другое сообщения об ошибке, но не такое.