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