У меня есть некоторые сомнения относительно результата следующего фрагмента. Заранее спасибо! Почему не называется деструктор B1? По-моему, «Dest B» должен отображаться перед «Dest A» . Любое объяснение будет оценено.Порядок выполнения деструктора в C++
class A1 {
public:
A1() { cout << "Const A" << endl; }
~A1() { cout << "Dest A" << endl; }
virtual const char* ClassName() const{ return ("A"); }
};
class B1:public A1 {
public:
B1() { cout << "Const B" << endl; }
~B1() { cout << "Dest B" << endl; }
virtual const char* ClassName() const { return ("B"); }
};
void foo1(A1 *a1)
{
cout << "foo1 has been passed an object of class " << a1->ClassName() << endl;
delete a1;
}
int main()
{
B1 *b1 = new B1;
foo1(b1);
return 0;
}
Каковы ваши «сомнения»? Какой у Вас вопрос? –
Код, который вы нам указали, не вызывает никакого деструктора, и он не соответствует выведенному вами выводу. Он даже не компилируется, не подумайте об этом. –
Извините за мое плохое редактирование. Теперь вопрос правильно отредактирован. –