В C ++ безопасно ли расширять область действия с помощью ссылки? - PullRequest
8 голосов
/ 02 ноября 2008

В C ++ безопасно ли расширять область видимости с помощью ссылки?

В коде я имею в виду:

MyCLass& function badIdea()
{
    MyClass obj1;
    ...
    return obj1;
}

Ответы [ 3 ]

20 голосов
/ 02 ноября 2008

НЕЛЬЗЯ расширять область действия посредством ссылки. Объекты в C ++ не считаются ссылками, когда obj1 выходит из области видимости, он будет удален, а ссылка на результат badIdea () только приведет к неприятностям

14 голосов
/ 02 ноября 2008

Единственное место, где можно расширять область с помощью ссылки, - это ссылка const в namespace или область действия функции (не с членами класса).

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

Этот прием используется в очень крутом ограждении прицела Андрея Александреску для const ссылки на базовый класс конкретного ограждения прицела.

0 голосов
/ 02 ноября 2008

Пожалуйста, уточните, что вы имеете в виду.

Предполагая, что вы собираетесь сделать это:

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

Тогда нет, абсолютно нет, область действия не расширяется при наличии ссылки.

Возможно, вы захотите взглянуть на умные указатели, например, из буст-библиотек: clickkety

...