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

Θοδωρής Λύτρας thlytras at gmail.com
Mon Dec 1 19:50:43 EET 2008


Στις Δευ 01 Δεκ 2008, ο/η Nikos Platis έγραψε:
> Θα έλεγα ότι η χωρίς λόγο μείξη των δύο μόνο μειονεκτήματα μπορεί να
> έχει: και μόνο αυτά που αναφέρεις (κόστος μετατροπής, ομοιογένεια
> κώδικα) μπορούν δυνητικά να είναι πολύ σοβαρά.
>
> Νομίζω ότι σε C++ ταιριάζουν πιο πολύ οι αναφορές (οι οποίες άλλωστε δεν
> υπήρχαν στη C) ενώ οι δείκτες μπορεί να φαίνονται πιο «φυσικοί» σε
> κάποιον που τους έχει συνηθίσει από C.
>
> Χρησιμοποιώντας δείκτες είναι λίγο πιο ξεκάθαρο ότι σκοπεύουμε να
> αλλάξουμε την τιμή της παραμέτρου στη συνάρτηση (αν το σκοπεύουμε!), ενώ
> με τις αναφορές συντακτικά κατά την κλήση δεν υπάρχει διαφοροποίηση.
>
> Σημαντική επίσης η χρήση του const: Στην περίπτωση των αναφορών, το
> πέρασμα με const & είναι σαν να περνάς την τιμή (καθώς δεν μπορεί να
> αλλάξει) αλλά γλυτώνεις την αντιγραφή. Στην περίπτωση του δείκτη, έχει
> σημασία πού θα βάλεις const ώστε να περιορίσεις τις αλλαγές (Type
> [const] * [const] x)
> (http://duramecho.com/ComputerInformation/WhyHowCppConst.html)

Να σας πω τι με ενοχλεί περισσότερο με τις αναφορές?
(Διορθώστε με αν κάνω λάθος). 

Με ενοχλεί οτι αναφορές σε αντικείμενα δε μπορείς να τις ορίσεις σαν "μέλη" 
μιας κλάσης, ενώ αντίθετα μπορείς να ορίσεις δείκτες σε αντικείμενα σαν μέλη 
μιας κλάσης, τα οποία μετά κάνεις allocate στον constructor.

Δηλαδή, για να γίνω αντιληπτός, με δείκτες μπορείς να κάνεις αυτό:

class Foo
{
	Foo (int x);
	...
}

class Bar
{
	Bar ();
private:
	void myMethod(Foo *);
	Foo *aFoo;
	Foo *bFoo;
	...
}

Bar::Bar()
{
aFoo = new Foo(5);
bFoo = new Foo(10);
...
myMethod(aFoo);
}

Όμως αντίθετα με αναφορές δε μπορείς να κάνεις κάτι σαν αυτό:

class Foo
{
	Foo (int x);
	...
}

class Bar
{
	Bar ();
private:
	void myMethod(Foo &);
	Foo aFoo(5);
	Foo bFoo(10);
	...
}

Bar::Bar()
{
myMethod(aFoo);
}

Αυτό είναι το βασικό μου πρόβλημα, και γι'αυτό μου φαίνονται πολύ πιο 
ευέλικτοι οι δείκτες.

Σχόλια?

Θοδωρής

-- 
"Beauty is transitory"
"Beauty survives"
        - Mr. Spock & Capt. Kirk, "That which survives", stardate unknown
by Theodore Lytras <thlytras at gmail.com>


More information about the Linux-greek-users mailing list