C++ pointer & reference ερωτηση
Ioannis Papadopoulos
giannis.papadopoulos at gmail.com
Mon Dec 1 22:28:45 EET 2008
Theodore Lytras wrote:
> Αυτό που θέλω να ρωτήσω είναι αν αυτό το operation έχει κάποιο overhead.
> Μήπως είναι καλύτερα να φτιάξω την μέθοδο myMethod να δέχεται (και να
> δουλεύει με) δείκτη σε αντικείμενο foo? (Αφού ούτως ή άλλως στην
> καλούσα συνάρτηση δουλεύω με δείκτη). Και έτσι να περνάω κατευθείαν
> τον δείκτη?
> Ή δεν έχει σημασία από άποψη απόδοσης/efficiency?
>
Δεν έχει ιδιαίτερη σημασία, με μία διαφορά: αν το reference είναι const
τότε ίσως είναι καλύτερο να το κάνεις έτσι, με dereference, καθώς δίνεις
στον compiler την ευκαιρία να κάνει μερικά πολύ aggressive optimizations.
> Και από πλευράς programming style?
> Μήπως είναι καλύτερα να χρησιμοποιώ μόνο δείκτες στον κώδικά μου, ή
> μόνο αναφορές? Μήπως είναι "μπερδευτικός" ο κώδικας όταν μπλέκουν τα
> δύο?
>
Συνήθως προτιμάται να χρησιμοποιείς references και όπου μπορείς const
φυσικά... Αν δεις και η STL έτσι είναι.
> Να πω την αλήθεια, μ'αρέσουν οι δείκτες, είναι πολύ ευέλικτοι και με
> λίγο προσοχή δε πιστεύω (μήπως είμαι υπερόπτης?) οτι κινδυνεύω από
> null pointers ή memory leaks.
> Μπορούμε να διατυπώσουμε μερικές αρχές για το πως είναι ωραιότερο να
> χρησιμοποιούμε το ένα ή το άλλο (χωρίς να μπλέξουμε σε pointers vs.
> references flamewar).
>
Ο γενικός κανόνας είναι references όπου μπορείς. Με εξαίρεση όταν
κατανέμεις μνήμη δυναμικά οπού εκεί είναι πολύ βολικό να έχεις τους
pointers, ώστε να θυμάσαι να τα σβήνεις. Επιπλέον, τα περισσότερα
containers δεν έχουν υποστήριξη για movable types - και άρα σου μένει
μόνον να χρησιμοποιείς pointers άμα θέλεις να αποφύγεις το copy
construction.
More information about the Linux-greek-users
mailing list