Когда я пишу свои try/catch
блоки, я всегда выбрасываю объекты по значению и ловлю по ссылке. Я также применяю правило, что наиболее производные классы должны стоять на первом месте.
Сегодня я попытался поймать ПО ЗНАЧЕНИЮ, нарушая это основное правило. Код ниже выполняется без проблем и печатает "A4"
.
Вопрос: какой тип CCA
аргумента передается в обработчик исключений, который выполняется? Исходный брошенный объект CCB
передается по значению объекту CCA
: это пример проблемы среза памяти или некоторого вида повреждения, т. Е. Объекту CCA
нельзя полностью доверять?
Привет
AFG
class CCA{
int m_value;
public:
CCA( int value ) : m_value( value ){}
};
class CCB : public CCA{
public:
CCB( int value ): CCA( value ){}
};
main(){
try{
throw CCB(4);
}catch( CCA a ){
std::cout << " A:" << a.value() << std::endl;
// this is the catch clause that executes
}catch( CCB b ){
std::cout << " B:" << b.value() << std::endl;
}
}