Поймать по ссылке в обработке исключений, не давая ожидаемый результат в C ++ - PullRequest
0 голосов
/ 22 октября 2018

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

1 Ответ

0 голосов
/ 22 октября 2018

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

вывод "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; 
}  
...