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