Προς το περιεχόμενο

C++ noob ερωτήσεις


Turrican

Προτεινόμενες αναρτήσεις

Δημοσ.

Για χαρά, έχω αρχίσει τελευταία να ασχολούμε με την C++ και έχω κάποιες ερωτήσεις:

 

1. Έστω οτι δημιουργώ objects με τους παρακάτω τρόπους:

>
a. MyObject obj1();
b. MyObject* obj2 = new MyObject();

 

Τώρα καταλαβαίνω οτι η μεταβλητη obj2 είναι pointer, ένας αριθμός που αντιστοιχεί στη θέση μνήμης που βρίσκεται πραγματικά το object.

 

Ολα καλά αλλά η μεταβλητή obj1 τι είναι; Δεν είναι και αυτή ένας pointer;

 

2. Εάν δημιουργήσω έναν pointer στο block μιας for πως τον κάνω delete οταν τελειώσω;

>
for (Iterator* it = c.iterator(); it.moveNext();) {
  ...
}

 

3. Εαν φτιάξω x αντικείμενα με την new και δεν τα κάνω delete ποτέ, οταν κάνει έξοδο το πρόγραμμά μου δεν θα καθαρίσει τη μνήμη το λειτουργικό;

 

4. Πως κάνω delete ένα αντικείμενο οταν το μόνο handler που έχω για αυτό είναι ένας void* pointer;

 

5. Είναι απαραίτητο στο definition μιας κλάσης να τελειώνεις με ; και αμέσως μετά με κενή γραμμή;

 

Αυτά! Συγνώμη αν σε μερικούς αυτά φαίνονται αστεία αλλά είμαι τελείως n00b στη C...

Δημοσ.

Χωρίς να είμαι 100% σίγουρος για ότι γράφω... και ξεκινόντας από το τέλος

 

- Δεν υπάρχουν χαζές ή αστείες απορείες.

 

1)

Μετά το obj1 είναι μία μεταβλητή τύπου MyObject (δηλαδή όπως λέμε τύπου Integer).

Τα obj1 & obj2 έχουν την ίδια διαφορά που έχουν και τα παρακάτω

>
int i;
int *j;

με την διαφορά βέβαια ότι καθώς ο int είναι βασικός τύπος δεδομένων δεν χρειάζετε δημιουργεία ενώ στο παράδειγμά σου το obj2 έχει γίνει created ενω το obj1 όχι ακόμα

 

2)

Αν δημιουργήσεις έναν pointer μέσα σε ένα for - loop. κανονικά πρέπει να κάνεις free τα objects μέσα στο For-loop ή αλλιώς να τα κρατάς σε μία λίστα και να τα κάνεις free μετα, αν θες δώσε κάποιο παράδειγμα.

 

3)

Σε γενικές γραμμές Ναι.

 

4) Αν ο pointer είναι void μπορείς να κάνεις typecast τον pointer και μετά free (ωστε να κάνει το σωστό Free).

 

5) Δεν ξέρω....

 

Βασικά δουλέυω σε Delphi οπότε όλες μου απαντήσεις προέρχονται πολύ από την εμπειρία μου εκεί, δεν νομίζω ότι υπάρχουν πολλές διαφορές στην διαχείριση των objects...

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...