Здравствуйте dupamid, Вы правы:
Ответ оказался прост. Нашел у Джон Роббинс "Отладка приложений в Windows"
В VC++ у компилятора есть два ключа: /EHa (/EHac) и /EHs (/EHsc , /GX)
В VC++ 5.0 поумолчанию — /EHa — как все и считали
В VC++ 6.0 поумолчанию (см. /GX) — /EHs — обработка исключений/раскрутка стека создается только если:
время жизни локального обьекта Ctest Ct2(2); пересекается с
а)вызовом ф-ии
б)throw
поэтому
f1(){
int *pi=new int;//-бесполезно, не пересекается со временем жизни Ct2 (деструктора не будет)
Ctest Ct2(2);
//exception
int *pi=new int;}//-будет деструктор
}
Но вот вопрос, а почему
cout <<"XZ\n"<<endl; — вызов ф-ии
printf("end f1\n"); — а это с точки зрения компилятора уже не вызов ф-ии ????