c++ pointer newb ερώτηση

Nikos Platis nplatis at freemail.gr
Fri Nov 7 20:39:08 EET 2008



O/H Θοδωρής Λύτρας έγραψε:
> Έχω μια ερώτηση για την C++ η οποία ίσως είναι αφελής, δεν τη βρίσκω όμως 
> καθόλου αυτονόητη:
>
> Έστω ότι έχω μια κλάση Α, η οποία έχει ως μέλος της μια μεταβλητή Β, και 
> δημιουργώ ένα αντικείμενό της στο σωρό (heap). Η μεταβλητή B δημιουργείται 
> στο σωρό ή στη στίβα (stack)??? Π.χ.:
>
> class A
> {
> public:
> 	int B;
> }
>
> void main()
> {
> A *myA = new A();
> }
>
>   
Δυστυχώς δεν είμαι σίγουρος για αυτό που ρωτάς. Όμως φαντάζομαι ότι αν 
ένα αντικείμενο δημιουργείται στο σωρό, τότε όλα του τα μέλη 
δημιουργούνται «μέσα του» άρα στο σωρό επίσης.
> Αν το A->B δημιουργείται στη στίβα, μήπως θα πρέπει να το δηλώσω ως δείκτη για 
> να δημιουργηθεί στο σωρό? Όμως άν το κάνω αυτό, μετά πως μπορώ να αναφερθώ 
> στην τιμή του B, δηλαδή να το κάνω dereference? Μήπως *Α->*Β ?? Η μήπως 
> **Α->Β ?????????
>   
Δηλαδή αν έχεις κάτι σαν:

class A
{
public:
    int* B;
};

void main()
{
A *myA = new A();
}

Τότε απλά το myA-> σε πηγαίνει στα μέλη του myA, άρα το myA->B είναι int* άρα η τιμή του θα είναι *(myA->B) [δεν μου αρέσει να κάνω οικονομία στις παρενθέσεις!]. Τώρα αν το B ήταν δείκτης σε αντικείμενο κάποιας κλάσης, το myA->B-> θα σε πήγαινε στα μέλη της κλάσης.

> Θα μου πείτε, γιατί να το φτιάξω στο σωρό? Γιατί μπορεί αντί για int να είναι 
> ένα μεγάλο αντικείμενο της Qt4... 
>
> Α, και κάτι ακόμα: όταν στην κλάση μου ορίζω pointers, θα πρέπει να τους κάνω 
> όλους delete στον destructor υποθέτω, έτσι???
>   
Εξαρτάται από το ποιος τους κάνει new! Αν γίνονται new μέσα στον 
constructor τότε φυσικά είναι το πιο σωστό να τους κάνεις delete στον 
destructor -- και σε αυτή την περίπτωση θυμάσαι να γράψεις επίσης copy 
constructor και operator=.

Νίκος Πλατής

-- 
-----------------------------------------------------------------------
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