c++: dynamic_cast vs reinterpret_cast

Theodore Lytras thlytras at gmail.com
Sun Sep 9 20:07:52 EEST 2012


Μια ερωτησούλα για όποιον ξέρει καλή C++:

Υπάρχει κάποιο μειονέκτημα του dynamic_cast έναντι του reinterpret_cast όταν 
μπορούν να χρησιμοποιηθούν και τα δύο? (Δηλαδή είναι έγκυρο το cast). 

Υποτίθεται πως το dynamic_cast κάνει ένα run-time checking και επιστρέφει null 
αν το επιχειρούμενο cast δεν είναι σωστό. Φαντάζομαι το overhead από αυτό το 
run-time checking είναι αμελητέο, τουλάχιστον όταν μιλάμε για 2-3 casts. 

Αυτό που με ανησυχεί όμως είναι οτι διάβασα πως απαιτείται o compiler να έχει 
το RTTI ενεργοποιημένο για να δουλέψει το dynamic_cast. Αυτό που δεν έχω 
καταλάβει είναι: (1) υπάρχει κάτι κακό στο να είναι το RTTI ενεργοποιημένο? 
και (2) αν δεν είναι ενεργοποιημένο και εγώ κάνω κανονικά compile, έχω 
undefined behaviour ή κάτι άλλο κακό, ή απλώς δε γίνεται το run-time checking 
και είναι σαν να έχω reinterpret_cast ??

Για να γίνω πιο συγκεκριμένος, έχω τις abstract base classes A και B, και μια 
σειρά concrete κλάσεων Χ1 έως Χ5. Οι Χ1, Χ2 και Χ3 κληρονομούν τόσο το A όσο 
και το B, ενώ οι Χ4 και X5 μόνο το Β. Ούτε η Α ούτε και η Β κληρονομούνται από 
άλλες κλάσεις. 

Αυτό που θέλω είναι να μετατρέψω δείκτες Α* σε δείκτες Β*. Φαντάζομαι αυτό 
μπορεί να γίνει τόσο με dynamic_cast όσο και με reinterpret_cast. Με ποιό από 
τα δύο λοιπόν θα πρέπει να το κάνω, και γιατί?

Ευχαριστώ,
Θοδωρής

Υ.Γ: Μη με βρίσετε που χρησιμοποιώ πολλαπλή κληρονομικότητα. Αυτή είναι που 
ταιριάζει με τη λογική των αντικειμένων μου. Το έχω σκεφτεί ξανά και ξανά.

-- 
"Beauty is transitory."
"Beauty survives."
        --  Mr. Spock & Capt. Kirk, "That Which Survives", stardate unknown
by Theodore Lytras <thlytras at gmail.com>


More information about the Linux-greek-users mailing list