Привет всем.
Вот
тутАвтор: 0xDEADBEEF
Дата: 05.10.05
0xDEADBEE описал один подход к обработке exception-ов.
Я попробовал и нарвался на проблему:
Приветствую.
Вот пытаюсь Ваш чудо способ применить у себя, но заметил одну небольшую непонятную ситуацию у себя. Может Вы проясните мне, как действовать в данной ситуации. Такое ощущение, что деструктор класса-исключения будет кидаться несколько раз:
void TheFunction()
{
try
{
// предположим у нас тут зовется что-то вроде
....
throw Exception1();
}
catch(...)
{
ExceptionFilter();
} // ВОТ ТУТ ВЫЗОВЕТСЯ ДЕСТРУКТОР ВТОРОЙ РАЗ
}
void ExceptionFilter()
{
try
{
throw;
}
catch(Exception1 const& e)
{
//делаем одно
} // ВОТ ТУТ ВЫЗОВЕТСЯ ДЕСТРУКТОР ПЕРВЫЙ РАЗ
catch(Exception2 const& e)
{
//делаем второе
}
catch(Exception3 const& e)
{
//делаем третье
}
catch(Exception4 const& e)
{
//делаем четвертое
}
catch(Exception5 const& e)
{
//делаем пятое
}
catch(...)
{
//делаем еще что-то
}
}
А вот теперь представим, что я пытаюсь отловить exception который определен в какой то сторонней библиотеке. И определен так, что как только мы ему зовем деструктор второй раз, так он тотчаз стреляет мой программе прямо в висок (что если у него в деструкторе стоит: delete pSomePtr
Как жить ? Как быть ? Или может я что то не так сделал ?
Здравствуйте, Dobre, Вы писали:
D>Привет всем.
D>Вот тутАвтор: 0xDEADBEEF
Дата: 05.10.05
0xDEADBEE описал один подход к обработке exception-ов.
D>Я попробовал и нарвался на проблему:
D>Приветствую.
D>Вот пытаюсь Ваш чудо способ применить у себя, но заметил одну небольшую непонятную ситуацию у себя. Может Вы проясните мне, как действовать в данной ситуации. Такое ощущение, что деструктор класса-исключения будет кидаться несколько раз:
[snip]
D>А вот теперь представим, что я пытаюсь отловить exception который определен в какой то сторонней библиотеке. И определен так, что как только мы ему зовем деструктор второй раз, так он тотчаз стреляет мой программе прямо в висок (что если у него в деструкторе стоит: delete pSomePtr
D>Как жить ? Как быть ? Или может я что то не так сделал ?
А ты уверен, что он не один раз вызывается? Может ты конструктор копии не учел? Приведи код, в котором это происходит, тогда можно будет сказать что-либо определенное.
The last good thing written in C was Franz Schubert's Symphony No. 9.
Здравствуйте, crable, Вы писали:
C>Здравствуйте, Dobre, Вы писали:
D>>Привет всем.
D>>Вот тутАвтор: 0xDEADBEEF
Дата: 05.10.05
0xDEADBEE описал один подход к обработке exception-ов.
D>>Я попробовал и нарвался на проблему:
D>>Приветствую.
D>>Вот пытаюсь Ваш чудо способ применить у себя, но заметил одну небольшую непонятную ситуацию у себя. Может Вы проясните мне, как действовать в данной ситуации. Такое ощущение, что деструктор класса-исключения будет кидаться несколько раз:
C>[snip]
D>>А вот теперь представим, что я пытаюсь отловить exception который определен в какой то сторонней библиотеке. И определен так, что как только мы ему зовем деструктор второй раз, так он тотчаз стреляет мой программе прямо в висок (что если у него в деструкторе стоит: delete pSomePtr
D>>Как жить ? Как быть ? Или может я что то не так сделал ?
C>А ты уверен, что он не один раз вызывается? Может ты конструктор копии не учел? Приведи код, в котором это происходит, тогда можно будет сказать что-либо определенное.
Приветствую, да все я учел. Деструктор и вправду вызывается 2 раза. Как ответил Кодт в другой ветке — это баг VC6.0, VC7.0
На VC7.1 все работает нормально.
И что же получается ? Такой черезвычайно удобной фичей нельзя пользоваться в VC6.0 ???