2014-06-09 3 views
1

J'utilise fonte dynamique pour la sécurité:cast dynamique des références

ici est le code que j'utilise avec des pointeurs:

XYZ xyz = dynamic_cast<XYZ*>(abc); 
if (xyz == nullptr) 
{ 
    // TODO handle error 
} 

Maintenant, est-il possible de faire la même chose mais avec des références:

XYZ& xyz = dynamic_cast<XYZ&>(abc); 
if (xyz == nullptr) 
{ 
    // TODO handle error 
} 

Ce code ne compile pas mais je demande s'il y a un moyen de le faire de la même manière.

Répondre

4

dynamic_cast déclenche une exception en cas d'échec s'il est utilisé avec des références. Pour gérer l'échec, attraper l'exception:

try { 
    XYZ& xyz = dynamic_cast<XYZ&>(abc); 
} 
catch (std::bad_cast& e) { 
    //handle error 
} 
2

Oui, mais puisque vous lancez une référence, nullptr n'est pas un résultat possible. Au lieu de cela, si le type dynamique de abc n'est pas convertible en XYZ, la distribution lancera std::bad_cast.

+0

Cela signifie que dans la distribution des pointeurs, un nullptr est retourné alors qu'en cas de références, une exception est levée? – mmohab

+0

Oui, c'est correct. – dlf