Question

En C ++, est-il prudent d'étendre la portée via une référence?

Dans le code, ce que je veux dire est:

MyCLass& function badIdea()
{
    MyClass obj1;
    ...
    return obj1;
}
Était-ce utile?

La solution

Il n’est PAS sûr d’étendre la portée par référence. Les objets en C ++ ne sont pas comptés en référence lorsque obj1 sort de la portée, il sera supprimé. Se référer au résultat de badIdea () ne vous causera que des problèmes

Autres conseils

Le seul endroit où vous pouvez étendre une portée avec une référence est avec une référence const dans espace de noms ou portée de la fonction (pas avec les membres de la classe).

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

Cette astuce est utilisée dans de Andrei Alexandrescu très cool garde de la portée afin de capturer une référence const à une classe de base de la garde de la portée concrète.

Veuillez clarifier ce que vous voulez dire.

En supposant que vous avez l’intention de le faire:

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

Alors non, absolument pas, la portée ne peut pas être étendue en ayant une référence.

Vous voudrez peut-être examiner les pointeurs intelligents, par exemple. à partir de bibliothèques boost: clickety

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top