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

В С++ безопасно ли расширять область видимости через ссылку?

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

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

Ответы

Ответ 1

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

Ответ 2

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

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

Этот трюк используется в Андрей Александреску очень круто scope guard, чтобы зафиксировать ссылку const на базовый класс защитника конкретной области.

Ответ 3

Просьба пояснить, что вы имеете в виду.

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

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

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

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