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

Theodore Lytras thlytras at gmail.com
Mon Dec 1 12:21:45 EET 2008


Θα ήθελα να ρωτήσω κάτι συγκεκριμένο (πάντα με την υποσημείωση οτι
είμαι ερασιτέχνης στον προγραμματισμό):

Έχω σε κάποιο σημείο του κώδικά μου έναν δείκτη σε ένα αντικείμενο της
κλάσης foo, και δουλεύω πάνω στο δείκτη.
Θέλω να περάσω το αντικείμενο αυτό σε μια μέθοδο myMethod, η οποία
δέχεται *αναφορά* σε αντικείμενο της κλάσης foo.
Είναι προφανές οτι θα πρέπει να κάνω dereference τον δείκτη μου
(βάζοντας το αστεράκι αριστερά), και να περάσω το αντικείμενο.

Αυτό που θέλω να ρωτήσω είναι αν αυτό το operation έχει κάποιο overhead.
Μήπως είναι καλύτερα να φτιάξω την μέθοδο myMethod να δέχεται (και να
δουλεύει με) δείκτη σε αντικείμενο foo? (Αφού ούτως ή άλλως στην
καλούσα συνάρτηση δουλεύω με δείκτη). Και έτσι να περνάω κατευθείαν
τον δείκτη?
Ή δεν έχει σημασία από άποψη απόδοσης/efficiency?

Και από πλευράς programming style?
Μήπως είναι καλύτερα να χρησιμοποιώ μόνο δείκτες στον κώδικά μου, ή
μόνο αναφορές? Μήπως είναι "μπερδευτικός" ο κώδικας όταν μπλέκουν τα
δύο?
Να πω την αλήθεια, μ'αρέσουν οι δείκτες, είναι πολύ ευέλικτοι και με
λίγο προσοχή δε πιστεύω (μήπως είμαι υπερόπτης?) οτι κινδυνεύω από
null pointers ή memory leaks.
Μπορούμε να διατυπώσουμε μερικές αρχές για το πως είναι ωραιότερο να
χρησιμοποιούμε το ένα ή το άλλο (χωρίς να μπλέξουμε σε pointers vs.
references flamewar).

Π.χ. διάβασα κάπου οτι είναι καλύτερο οι μέθοδοι μιας κλάσης να
δουλεύουν με references, γιατί "κρύβουν" καλύτερα τα "ενδότερά" τους
από την καλούσα συνάρτηση. Ισχύει κάτι τέτοιο? Γιατί κάπως κουφό μου
ακούστηκε: φαντάζομαι οτι πρέπει να ξέρει κανείς αν τα ορίσματα της
μεθόδου περνούν by-value ή by-reference (είτε με pointer είτε με
reference).

Αυτά και συγνώμη για τη φλυαρία...

Θοδωρής


More information about the Linux-greek-users mailing list