Вызов виртуальной функции в деструкторе (VC 7.0)
От: comer США http://getboost.codeplex.com/
Дата: 23.09.03 00:06
Оценка:
Понятное дело что такой вызов не приветствуеться. Но, проведем эксперимент на разных компиляторах.

// 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)


Спрашиваеться, а почему линкер ищет эту абстрактную функцию? Я понял бы другое сообщения об ошибке, но не такое.
getboost.codeplex.com
citylizard.codeplex.com
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.