Re: Исключения(exception) и вызов деструкторов
От: dupamid Россия  
Дата: 02.08.02 06:17
Оценка:
Здравствуйте Аноним, Вы писали:

А>В этом варианте при возникновение исключения вызывается деструктор статического класса, но если я убираю строку "cout <<"XZ\n"<<endl;" (в ф-ии f1() ), то вызова этого деструктора не вижу.

А>
А>#include "stdafx.h"
А>#include <iostream.h>

А>void f1();
А>class Ctest
А>{
А>    
А>    public:
А>        int iType; // 1- heap ; 2- stack
А>        Ctest(int _iType): iType(_iType) { cout << "test "<<iType<< "\n"<<endl; }
А>        ~Ctest() { cout <<"~test "<<iType<< "\n"<<endl;    }

А>};

А>int main(int argc, char* argv[])
А>{

А>    try 
А>    //__try 
А>    {    
А>        printf("start __try\n");
А>        f1(); // - âíåé áóäåò èñêëþ÷åíèå
А>        printf("end __try\n");
А>    } 
А>    catch(...)
А>    //__except (EXCEPTION_EXECUTE_HANDLER)
А>    { 
А>        printf("__except\n");
А>    } 

А>    printf("end example\n");
А>    return 0;
А>}

А>void f1()
А>{
А>    Ctest Ct2(2);// 2- stack
А>    
А>    //cout <<"XZ\n"<<endl;    

А>    DWORD dw=0;
А>    dw = 5/dw;
А>    DWORD *pdw=0; *pdw=1;

А>    printf("end f1\n");
А>}
А>


Если есть желание чтобы компилятор правильно ловил такие исключения как деление на ноль в С++ try/catch блоках, то для MS Visual C++ нужно включить поддержку для асинхронных исключений, при этом код заметно распухнет и будет медленнее, но будет все правильно ловить и вызывать деструкторы, по умолчанию она выключена. По Стандарту все исключения синхронные, так что поддержка асинхронных исключений это расширение Стандарт MS'ом.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.