C ++: ссылка на объект "вне области видимости" - PullRequest
7 голосов
/ 30 марта 2012

Есть одна вещь, которую я никогда не понимал в ссылках, и я надеюсь, что это поможет мне. Насколько я знаю, ссылка не может быть нулевой. Но что произойдет, если у вас есть функция foo (), возвращающая ссылку на объект стека:

Object & foo(){
    Object o;
    return o;
}

Object & ref = foo();

Теоретическая ссылка будет относиться к несуществующему объекту, поскольку o выходит из области видимости, как только функция возвращается. Что здесь происходит?

Ответы [ 3 ]

11 голосов
/ 30 марта 2012

Это вызывает неопределенное поведение. Не делай этого.

Реально, с точки зрения реализации, ссылка будет указывать на стек, где раньше был стек-кадр для вызова foo. Эта память во многих случаях все еще имеет смысл, поэтому ошибка часто не сразу очевидна. Следовательно, вы должны позаботиться о никогда не делать подобную висячую ссылку.

1 голос
/ 30 марта 2012

Поведение в этом контексте не определено - это не особенно странно в c ++.Это по сути идентично ситуации, когда у вас есть указатель на локальную переменную, которая вышла из области видимости.C ++ требует от вас управления ссылками дескриптора и времени жизни ссылочных объектов.

1 голос
/ 30 марта 2012

ничего, прежде чем использовать возвращенную ссылку - тогда вы будете читать / писать поверх стека

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...