Отлов по ссылке в обработке исключений, не дающий ожидаемый результат в переполнении стека

Я переживал разницу между поймать по значению / референции в обработке исключений в 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 () должен захватить Производный ?
или я что-то не так делаю?

0

Решение

Деструктор базового класса должен быть виртуальным.

вывод «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;
}
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]