Согласно FAQ по C ++ , когда бросается объект, он генерируется с использованием типа выражения static . Следовательно, если у вас есть:
catch ( some_exception const &e ) {
// ...
throw e; // throws static type, possibly causing "slicing"; should just "throw;" instead
}
и e
- это на самом деле ссылка на некоторый класс, производный от some_exception
, приведенный выше throw
будет заставить объект "нарезаться" беззвучно. Да, я знаю, что правильный ответ - просто бросить;
, но нынешнее положение вещей кажется ненужным источником путаницы и ошибок.
Что? в чем причина этого? Почему не вы хотите, чтобы он генерировался с помощью типа динамический объекта?