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

V13 v13 at v13.gr
Fri Nov 7 22:25:47 EET 2008


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

Ean se mperdevei to parapano skepsoy os eksis:

struct A { int B; };

Einai *akribos* to idio.

Apo ekei kai pera, to myA desmevei mnimi apo to heap kai oysiastika h mnimi 
poy xreiazetai to myA (typoy A) einai ta 4 bytes poy pianei o B. Ara, to 
myA->B (kai oxi A->B opos egrapses) brisketai sth heap.

To parakato:

--------------
#include<iostream>

using namespace std;

class A
{
public:
        int B;
};

int main()
{
  A *myA = new A();
  int *p;

  myA->B=5;
  p=(int *)myA;

  cout << sizeof(A) << endl;
  cout << *p << endl;
}
--------------

Exei eksodo:

$ ./a
4
5

> Α, και κάτι ακόμα: όταν στην κλάση μου ορίζω pointers, θα πρέπει να τους
> κάνω όλους delete στον destructor υποθέτω, έτσι???

Oti kaneis new/malloc prepei na to kaneis delete/free akribos mia fora. To poy 
kai pos einai thema ylopoihshs.

<<V13>>




More information about the Linux-greek-users mailing list