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

hoo2 hoo2chris at gmail.com
Mon Dec 1 20:58:51 EET 2008


> Να σας πω τι με ενοχλεί περισσότερο με τις αναφορές?
> (Διορθώστε με αν κάνω λάθος). 
>
> Με ενοχλεί οτι αναφορές σε αντικείμενα δε μπορείς να τις ορίσεις σαν "μέλη" 
> μιας κλάσης, ενώ αντίθετα μπορείς να ορίσεις δείκτες σε αντικείμενα σαν μέλη 
> μιας κλάσης, τα οποία μετά κάνεις allocate στον constructor.
>   
Για κάποιο λόγο πιστέυω ότι αυτό που προσπαθείς να κάνεις είναι αυτό που
λέμε Independent reference, που όμως αυτό προυποθέτει οτι θα γίνει και
initialization ταυτόχρονα με το declaration. Βλέπεις οι αναφορές δεν
είναι αντικείμενα. Μια "ανεξάρτητη" αναφορά επομένως πρέπει να "δείχνει"
κάπου. A και αυτό πιστέυω οτι γίνεται κάπως έτσι.

    FooType& aName = lValue;
ή   const FooType& aName = 1; //Ας πούμε ένα νούμερο αποδεκτό μόνο σαν const

Τέλος πάντων γενικά για το "θέμα". Οι αναφορές ΔΕΝ ΕΙΝΑΙ αντικείμενα.
Αντίθετα είναι παρατσούκλια. Θα μπορούσε κάποιος να τις σκέφτεται σαν
constant pointers που γίνονται αυτόματα dereferenced κάθε φορά που
χρησιμοποιούνται. Και αυτό πιστεύω ότι είναι μια προσέγγιση που δεν
"βλάπτει" και πολύ κάποιον να τις σκέφτεται με αυτό τον τρόπο.

Ούτως ή άλλως καλό είναι να μην προσπαθούμε να αντικαταστήσουμε τους
δείκτες με αναφορές και να κάνουμε ότι κάναμε με τους δείκτες στην C
τώρα πια με τις αναφορές στην C++. Είναι διαφορετικά πράγματα και
αποσκοπούν σε διαφορετικές δουλειές. Παράδειγμα οι αναφορές είναι πάρα
πολύ χρήσιμες όταν κάνουμε operator overloading ή όταν κάνουμε
overloading ένα constructor και πολλά άλλα. Σπάνια χρησιμοποιούνται σαν
ανεξάρτητες (Όπως το παράδειγμα με τον κώδικα και τις αναφορές σαν
members δηλαδή). Οι δείκτες πάλι και αυτοί χρησιμεύουν σε πάρα πολλά
πράγματα που και μόνο να αναφέρω μερικά θα μου πάρει ώρα. Καλό είναι
λοιπόν να χρησιμοποιούμε ότι βολεύει καλύτερα στην περίσταση και όχι να
ξαναγράφουμε πράγματα προσπαθώντας να ανακαλύψουμε από την αρχή τον τροχό.

Συγνώμη αν δεν απαντάω με κώδικα στην ερώτηση, αλλά πιστεύω ότι το
πρόβλημα δεν είναι στον κώδικα, αλλά στην αντίληψη ότι η C++ με τις
αναφορές δεν ήρθε να καταργήσει τους δείκτες αλλά να προσθέσει εργαλεία
για να κάνει την ζωή ευκολότερη στους προγραμματιστές (λέμε τώρα).
Εργαλεία που ήταν απαραίτητα για να υλοποιηθούν κάποιες λειτουργίες με
αντικείμενα που δεν γινόταν να επιτευχθούν με τους δείκτες. Το να έγραφα
ένα σωρό class mpla mpla const mpla mpla &, * δεν θα μας πήγαινε κάπου.

Ευχαριστώ.




More information about the Linux-greek-users mailing list