Domanda

In C ++, è sicuro estendere l'ambito tramite un riferimento?

Nel codice, intendo:

MyCLass& function badIdea()
{
    MyClass obj1;
    ...
    return obj1;
}
È stato utile?

Soluzione

NON è sicuro estendere l'ambito tramite riferimento. Gli oggetti in C ++ non vengono conteggiati come riferimento quando obj1 esce dal campo di applicazione, verrà eliminato, facendo riferimento al risultato di badIdea () ti metterà nei guai

Altri suggerimenti

L'unico posto in cui è possibile estendere un ambito con un riferimento è con un riferimento const in namespace o ambito funzione (non con membri della classe).

const int & cir = 1+1; // OK to use cir = 2 after this line 

Questo trucco è usato in di Andrei Alexandrescu molto cool protezione dell'oscilloscopio per acquisire un riferimento const a una classe base della protezione dell'oscillazione concreta.

Per favore, chiarisci cosa intendi.

Supponendo che tu intenda farlo:

int * p = NULL;
{
  int y = 22;
  p = &y;
}
*p = 77; // BOOM!

Quindi no, assolutamente no, l'ambito non viene esteso con un riferimento.

Potresti voler guardare i puntatori intelligenti, ad es. dalle librerie boost: clickety

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top