В C ++ безопасно ли расширять область действия с помощью ссылки?
Вопрос
В C ++ безопасно ли расширять область видимости с помощью ссылки?
В коде я имею в виду следующее:
MyCLass& function badIdea()
{
MyClass obj1;
...
return obj1;
}
Решение
НЕЛЬЗЯ расширять область действия посредством ссылки. Объекты в C ++ не считаются ссылками, когда obj1 выходит из области видимости, он будет удален, а ссылка на результат badIdea () только доставит вам неприятности
Другие советы
Единственное место, где можно расширять область видимости с помощью ссылки, - это ссылка const
в пространстве имен
или область действия функции (не для членов класса).
const int & cir = 1+1; // OK to use cir = 2 after this line
Этот трюк используется в очень крутой Андрея Александреску ограничитель области для захвата ссылки const
на базовый класс конкретного элемента защиты области.
Пожалуйста, уточните, что вы имеете в виду.
Предполагая, что вы собираетесь это сделать:
int * p = NULL;
{
int y = 22;
p = &y;
}
*p = 77; // BOOM!
Тогда нет, абсолютно нет, область действия не расширяется при наличии ссылки.
Возможно, вы захотите взглянуть на умные указатели, например, из расширенных библиотек: clickety