Pregunta

En C ++, ¿es seguro extender el alcance a través de una referencia?

En código, lo que quiero decir es:

MyCLass& function badIdea()
{
    MyClass obj1;
    ...
    return obj1;
}
¿Fue útil?

Solución

NO es seguro extender el alcance a través de la referencia. Los objetos en C ++ no se cuentan como referencia cuando obj1 se sale del ámbito; se eliminará; si se hace referencia al resultado de badIdea (), solo tendrá problemas.

Otros consejos

El único lugar en el que está bien extender un alcance con una referencia es con una referencia const en namespace o un alcance de función (no con miembros de clase).

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

Este truco se usa en de Andrei Alexandrescu muy bien protector de alcance para capturar una referencia const a una clase base del protector de alcance concreto.

Por favor, aclara lo que quieres decir.

Suponiendo que tiene la intención de hacer esto:

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

Entonces no, absolutamente no, el alcance no se amplía al tener una referencia.

Es posible que desee ver los punteros inteligentes, por ejemplo, de las bibliotecas de impulso: clickety

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top