Я переживал разницу между поймать по значению / референции в обработке исключений в c ++
Наткнулся на этот блог https://blog.knatten.org/2010/04/02/always-catch-exceptions-by-reference/
Пробовал то же самое, и я не получаю ожидаемый результат.
#include<iostream>
using namespace std;
#include <typeinfo>
class Base {};
class Derived: public Base {};
int main()
{
try
{
throw Derived();
}
catch(Base &b)
{
cout<<typeid(b).name();
}
return 0;
}
Вывод, который я получаю: 4Base
Поскольку я ловлю по ссылке, typeid (b) .name () должен захватить Производный ?
или я что-то не так делаю?
Деструктор базового класса должен быть виртуальным.
вывод «7Derived»
#include<iostream>
#include <typeinfo>
using namespace std;
class Base {
public:
virtual ~Base(){};
};
class Derived: public Base {};
int main()
{
try
{
throw Derived();
}
catch(Base &b)
{
cout<<typeid(b).name();
}
return 0;
}
Других решений пока нет …