#include <iostream>
class A
{
public:
A()
{
std::cout << "A()" << std::endl;
}
virtual ~A()
{
std::cout << "~A()" << std::endl;
}
};
class B:public A
{
public:
B()
{
throw std::exception();
std::cout << "B()" << std::endl;
}
~B()
{
std::cout << "~B()" << std::endl;
}
};
int main()
{
try
{
B b;
}
catch(std::exception & e)
{
}
return 0;
}
Приведенный выше код выхода,Исключение исключения в конструкторе производного класса. Почему деструктор класса называется деструктором класса, но не производным?
A()
~A()
К тому времени, исключение выбрасывается, В был создан. Тогда почему деструктор B не называется?
Вызывается только деструкторы успешно построенных объектов. Другими словами, вы ошибаетесь, говоря, что 'B' был создан к моменту исключения исключения. См. [This] (http://stackoverflow.com/a/10212864/2297365). – huu