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