Цитата El Scorpio:
Oleg_SK, скорее всего, это недоработка конкретного компилятора »
|
El Scorpio, Это не недоработка, это так и нужно (читайте RFC). Виртуальный деструктор должен быть объявлен специально. Чтобы он объявлялся автоматически, нужно чтобы он был объявлен виртуальным в одном из базовых классов.
Код:
![Выделить весь код](images/misc/selectcode.png)
class vA
{
virtual ~vA() {clog << "vA::~vA()\n";}
};
class A
{
~A() {clog << "A::~A()\n";}
}
class vB : public vA
{
~vB() {clog << "vB::~vB()\n";}
};
class B : public A
{
~B() {clog << "B::~B()\n";}
}
// испытываем:
vA* va = new vB();
delete va;
// вызовет ~vB(), ~vA()
A* a = new B();
delete a;
// вызовет ~A()