В C ++, в чем разница между следующими примерами?
Перебросить указатель :
catch (CException* ex) { throw ex; }
Простой повторный бросок :
catch (CException* ex) { throw; }
Когда повторный бросок пойман, трассировка стека будет другой?
Да. По сути, вы бросаете объект самостоятельно в первом случае. Похоже, вы сами сгенерировали исключение в строке throw ex. Во втором случае вы просто позволяете исходному объекту подняться в стеке вызовов (и, таким образом, сохраняете исходный стек вызовов), они отличаются. Обычно вы должны использовать throw;.
throw ex
throw;
Я думаю, что есть разница в производительности. Вторая версия не будет делать временную копию исключения. Первый создаст копию, поэтому путь - это путь.
Вы можете создать простой класс исключений и опробовать его, напечатать конструктор / конструктор копирования в консоли при их запуске Таким образом, вы должны увидеть разницу.