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