C++ pointer & reference ερωτηση

Nikos Platis nplatis at freemail.gr
Mon Dec 1 20:43:48 EET 2008



O/H Θοδωρής Λύτρας έγραψε:
> Να σας πω τι με ενοχλεί περισσότερο με τις αναφορές?
> (Διορθώστε με αν κάνω λάθος). 
>
> Με ενοχλεί οτι αναφορές σε αντικείμενα δε μπορείς να τις ορίσεις σαν "μέλη" 
> μιας κλάσης, ενώ αντίθετα μπορείς να ορίσεις δείκτες σε αντικείμενα σαν μέλη 
> μιας κλάσης, τα οποία μετά κάνεις allocate στον constructor.
>
> ....
>   
> Αυτό είναι το βασικό μου πρόβλημα, και γι'αυτό μου φαίνονται πολύ πιο 
> ευέλικτοι οι δείκτες.
>
> Σχόλια?
>
> Θοδωρής
>   
Μήπως προέρχεσαι από Java;! (δεν το λέω για κακό ή για καλό, απλώς μια 
εντύπωση...)

Εντάξει, στη C++ οι αναφορές κάνουν τη ζωή μας πιο εύκολη, απαλλάσσοντάς 
μας από την *υποχρέωση*, κάποιες φορές να χρησιμοποιήσουμε δείκτες, αλλά 
σαφώς δεν μπορούν να αντικαταστήσουν τους δείκτες.

Κατά τα άλλα, οι αναφορές δεν είναι τίποτα άλλο από *συνώνυμα* 
αντικειμένων, και, όπως θα ξέρεις, από τη στιγμή που αναφέρονται σε ένα 
αντικείμενο δεν μπορούν να αλλάξουν και να δείξουν σε άλλο. Η σχετική 
ενότητα στον Stroustrup είναι (όπως πάντα) εξαιρετικά πληροφοριακή.

Προσωπικά αναφορές χρησιμοποιώ στις εξής περιπτώσεις:

α) Όταν παίζω με αντικείμενα (όχι δείκτες) και θέλω σε μία συνάρτηση να 
τα αλλάξω ενώ είναι παράμετροι. Αφού υπάρχει η δυνατότητα και 
διευκολύνει (γλυτώνω τη μετατροπή της παραμέτρου σε δείκτη και επίσης 
γλυτώνω το χειρισμό δείκτη μέσα στη συνάρτηση), γιατί να μην τη 
χρησιμοποιήσω;

β) Για να γλυτώσω την αντιγραφή αντικειμένων που περνάνε ως παράμετροι 
(τις δηλώνω ως const Τ&), οπότε κερδίζω σε ταχύτητα.

γ) Σπάνια, σύμφωνα με τον ορισμό τους ως συνώνυμα αντικειμένων, π.χ. αν 
θέλω να χρησιμοποιήσω πολλές φορές το a->b.c->d το θέτω ως Τ& x = 
a->b.c->d οπότε κάνω την όλη "διαδρομή" μόνο μία φορά, γλυτώνω τη 
δημιουργία καινούργιου αντικειμένου και την αντιγραφή, ο κώδικας γίνεται 
πιο ευανάγνωστος, κ.λπ.


Νίκος

-- 
-----------------------------------------------------------------------
Nikos Platis                                e-mail: nplatis at freemail.gr

"The empires of the future are the empires of the mind." - W. Churchill
-----------------------------------------------------------------------




More information about the Linux-greek-users mailing list