Em C ++, é seguro estender o escopo por meio de uma referência?
Pergunta
Em C ++, é seguro estender o escopo por meio de uma referência?
No código, o que quero dizer é:
MyCLass& function badIdea()
{
MyClass obj1;
...
return obj1;
}
Solução
Não é seguro estender o escopo por meio de referência. Os objetos em C ++ não são contados de referência quando o Obj1 sair do escopo, será excluído, referindo -se ao resultado de Badidea () só o colocará em problemas
Outras dicas
O único lugar em que é bom estender um escopo com uma referência é com um const
referência em namespace
ou escopo da função (não com membros da classe).
const int & cir = 1+1; // OK to use cir = 2 after this line
Este truque é usado em Andrei Alexandrescu's muito legal Guarda de escopo Para capturar um const
Referência a uma classe base do guarda -escopagem do concreto.
Por favor, esclareça o que você quer dizer.
Supondo que você pretenda fazer isso:
int * p = NULL;
{
int y = 22;
p = &y;
}
*p = 77; // BOOM!
Então não, absolutamente não, o escopo não é estendido com uma referência.
Você pode querer olhar para os indicadores inteligentes, por exemplo, das bibliotecas do Boost: Cliquety