Как так получается, что у внутреннего объекта при создании для базового класса вызывается обычный конструктор, а у его наследника конструктор копирования
static int i;
class A {
public:
A() : num(i) { wcout << i++ << _T("A c-tor\n"); }
A(const A&) : num(i) { wcout << i++ << _T("A copy c-tor\n"); }
~A() { wcout << num << _T("A d-tor\n"); }
int num;
};
class B : public A {
public:
B() : num(A::num) { wcout << num << _T("B c-tor\n"); }
B(const B&) : num(A::num) { wcout << num << _T("B copy c-tor\n"); }
~B() { wcout << num << _T("B d-tor\n"); }
int num;
};
int _tmain(int argc, _TCHAR* argv[])
{
try {
B b;
throw b;
} catch(A a) {
wcout << _T("In a catch\n");
} catch(B b) {
wcout << _T("In b catch\n");
}
return 0;
}