c++: dynamic_cast vs reinterpret_cast

John Tsiombikas nuclear at member.fsf.org
Mon Sep 10 13:48:09 EEST 2012


On Sun, Sep 09, 2012 at 08:07:52PM +0300, Theodore Lytras wrote:
> Μια ερωτησούλα για όποιον ξέρει καλή C++:
> 
> Υπάρχει κάποιο μειονέκτημα του dynamic_cast έναντι του reinterpret_cast όταν 
> μπορούν να χρησιμοποιηθούν και τα δύο? (Δηλαδή είναι έγκυρο το cast). 

Nai... to dynamic_cast den einai cast, kanei extra malakies gia na
elenksei ti type exei ayto pou kaneis cast klp. To reinterpret_cast den
exei logo yparksis, just (cast) ...

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

Ameliteo nai, alla gia poio logo na to xrisimopoiiseis an den yparxei
logos kai ksereis idi typo exei ayto pou kaneis cast? Den sou prosferei
tipota.

> Αυτό που με ανησυχεί όμως είναι οτι διάβασα πως απαιτείται o compiler να έχει 
> το RTTI ενεργοποιημένο για να δουλέψει το dynamic_cast. Αυτό που δεν έχω 
> καταλάβει είναι: (1) υπάρχει κάτι κακό στο να είναι το RTTI ενεργοποιημένο? 

Tipota aksiosimioto. Apla ligo extra space overhead gia kathe antikeimeno.

> Για να γίνω πιο συγκεκριμένος, έχω τις abstract base classes A και B, και μια 
> σειρά concrete κλάσεων Χ1 έως Χ5. Οι Χ1, Χ2 και Χ3 κληρονομούν τόσο το A όσο 
> και το B, ενώ οι Χ4 και X5 μόνο το Β. Ούτε η Α ούτε και η Β κληρονομούνται από 
> άλλες κλάσεις. 
> 
> Αυτό που θέλω είναι να μετατρέψω δείκτες Α* σε δείκτες Β*. Φαντάζομαι αυτό 
> μπορεί να γίνει τόσο με dynamic_cast όσο και με reinterpret_cast. Με ποιό από 
> τα δύο λοιπόν θα πρέπει να το κάνω, και γιατί?

B *bptr = (B*)aptr;

Seriously... ksexna ta whatever_casts<kourasi>(foo)... den yparxei logos
na kaneis ton kodika sou toso asximo.

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

Den einai toso aparaitito na teriazei 1-1 i eikona ton antikeimenon sou
sto myalo sou me ton kodika. Einai protimotero na aplopoiiseis ton
kodika synithos.

-- 
John Tsiombikas
http://nuclear.mutantstargoat.com/


More information about the Linux-greek-users mailing list