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