Да.Правило состоит в том, что каждый объект, конструктор которого успешно завершен, будет уничтожен при исключении.Например:
class A {
public:
~A() {}
};
class B : public A {
public:
B() { throw 0; }
~B() {}
};
~ A () вызывается.~ B () не вызывается;
РЕДАКТИРОВАТЬ: более того, предположим, что у вас есть члены:
struct A {
A(bool t) { if(t) throw 0; }
~A() {}
};
struct B {
A x, y, z;
B() : x(false), y(true), z(false) {}
};
Что происходит так: x построен, y выбрасывает, x разрушен (но ни yни з).