Ritorno di un valore e il reference

di il
6 risposte

Ritorno di un valore e il reference

Ciao a tutti

Sapete cosa cambia nel mettere o non mettere il reference affianco alla funzione?
Poiche sia 'a' che 'b' diventano pari a 10 sto ritornando in entrambi i casi un valore?

#include <iostream>
using namespace std;

int f(){
    int a=10;
    int *v;
    v=&a;
    return *v;
}

int &f2(){
    int a=10;
    int *v;
    v=&a;
    return *v;
}

int main(){
    int b,a;
    b=f();
    a=f2();
    cout<<b<<' '<<a;
    return 0;
}

6 Risposte

  • Re: Ritorno di un valore e il reference

    Ti torna 10 per caso, è un comportamento indefinito. Dovresti fare così:
    
    int &f2(){
        int *v = new int {10};  
        return *v;
    }
    
  • Re: Ritorno di un valore e il reference

    Faccio una domanda da inesperto, scusatemi

    Ma così facendo non si lascia un area di memoria allocata ma non più puntata, quello che chiamano 'dangling pointer'?
  • Re: Ritorno di un valore e il reference

    StandardOil ha scritto:


    Faccio una domanda da inesperto, scusatemi

    Ma così facendo non si lascia un area di memoria allocata ma non più puntata, quello che chiamano 'dangling pointer'?
    Sì, ma si chiama memory leak.
    Un oggetto potrebbe mantenere al suo interno il puntatore alla memoria allocata, oppure restituire un reference a sé stesso (il caso dell'operatore =). In quel caso restituire il reference sarebbe un'operazione sicura.

    Oppure c'è il caso particolare:
    
    int f() {
      return 5;
     } 
    void main{
    const int& myref = f();
    } 
    
    In questo caso il valore temporaneo ritornato da f sopravvive fintanto che myref non esce dal suo scopo, anche se è immodificabile.
  • Re: Ritorno di un valore e il reference

    Grazie
  • Re: Ritorno di un valore e il reference

    StandardOil ha scritto:


    Faccio una domanda da inesperto, scusatemi

    Ma così facendo non si lascia un area di memoria allocata ma non più puntata, quello che chiamano 'dangling pointer'?
    Certo che c'è memory leak, ma l'OP sta facendo una cosa più pericolosa dato che int a di f2() è nello stack ed è molto probabile che venga sovrascritta. Infatti non è detto che a schermo abbia "10 10".
    Poi più avanti ovviamente dovrà imparare a liberare la memoria heap correttamente, quando userà centinaia di MB di RAM. Un passo alla volta
  • Re: Ritorno di un valore e il reference

    Grazie mille
Devi accedere o registrarti per scrivere nel forum
6 risposte