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

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

Δημοσ.

Καλησπέρα!

Έχω μια βασική απορία.

 

Έχουμε την περίπτωση π.χ. της υπερφόρτωσης του << που επιστρέφουμε αναφορά του ίδιου του stream για να μπορέσουμε να συνεχίσουμε με πολλαπλά <<.

Και γενικότερα, για όποιο παρόμοιο λόγο μπορεί να χρειαστεί, επιστρέφουμε μια αναφορά ενός ήδη δημιουργημένου αντικειμένου έπειτα από το πέρας μιας λειτουργίας (πχ μετά το assignment).

 

Το να έχουμε μια συνάρτηση που να επιστρέφει αναφορά ενός αντικειμένου, το instance του οποίου δημιουργείται εσωτερικά της συνάρτησης, έχει καποιο νόημα;;;

Στύβω το κεφάλι μου να βρώ κάποιο νόημα και δε μπορώ.

 

Μόνο memory leaks βλέπω. :-( :fear:

 

π.χ.

>
Point& refTest(const Point& item1, const Point& item2){
Point *t = new Point;
t->a = item1.a + item2.a;
t->b = item1.b + item2.b;
return *t;
}
int main(int argc, char** argv)
{
Point a(1,1);
Point b(2,2);

Test c  = refTest(a,; 
Test &d = refTest(a,;

return 0;
}

 

Όποιος γνωρίζει σχετικά ας με διαφωτίσει παρακαλώ.

 

Ευχαριστώ!

 

Υ.Γ.

Φυσικά είναι τελείως διαφορετικό πράγμα η επιστροφή by value αντικειμένου, πράγμα αρκετά χρήσιμο (πχ στην υπερφόρτωση του τελεστή + )

Δημοσ.

Δεν μπορω να καταλαβω που ακριβος εχεις σκαλωσει. Το να επιστρεψεις μια αναφορα απο κατι που εχει πεθανει ή κατι που ζει στην heap και δεν ειναι καπου αλλου, ε, ειναι καπως happy.gif

Δημοσ.

Επίσης: αφού χρησιμοποιείς δείκτη, γιατί να το μπλέξεις με αναφορά; Επίστρεψε τον δείκτη και είσαι εντάξει. Η αναφορά είναι (ας πούμε και) για να μην μπλέξεις με δείκτες.

Δημοσ.
>
Point& refTest(const Point& item1, const Point& item2){
 Point *t = pool_allocate();
 t->a = item1.a + item2.a;
 t->b = item1.b + item2.b;
 return *t;
}

int main(int argc, char** argv)
{
 Point a(1,1);
 Point b(2,2);
 Test c  = refTest(a,; 
 Test &d = refTest(a,;
 return 0;
} // bye bye c and d

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...