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

StackOverflow https://stackoverflow.com/questions/256724

  •  05-07-2019
  •  | 
  •  

Вопрос

В 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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top