Повторная выдача исключения, пойманного указателем - PullRequest
1 голос
/ 15 мая 2009

В C ++, в чем разница между следующими примерами?

Перебросить указатель :

catch (CException* ex)
{
    throw ex;
}

Простой повторный бросок :

catch (CException* ex)
{
    throw;
}

Когда повторный бросок пойман, трассировка стека будет другой?

Ответы [ 2 ]

7 голосов
/ 15 мая 2009

Да. По сути, вы бросаете объект самостоятельно в первом случае. Похоже, вы сами сгенерировали исключение в строке throw ex. Во втором случае вы просто позволяете исходному объекту подняться в стеке вызовов (и, таким образом, сохраняете исходный стек вызовов), они отличаются. Обычно вы должны использовать throw;.

0 голосов
/ 15 мая 2009

Я думаю, что есть разница в производительности. Вторая версия не будет делать временную копию исключения. Первый создаст копию, поэтому путь - это путь.

Вы можете создать простой класс исключений и опробовать его, напечатать конструктор / конструктор копирования в консоли при их запуске Таким образом, вы должны увидеть разницу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...