Примечание: OP и другие ответы предлагают варианты возврата ранее существующего объекта (глобальный, static
в функции, переменная-член).Однако в этом ответе обсуждается возвращение переменной, время жизни которой начинается в функции, что, как я думал, было духом вопроса, а именно:
как мы можем вернуть переменную по ссылке, в то время какобласть действия возвращаемой функции исчезла, и ее переменные были уничтожены сразу после возвращения переменной.
Единственный способ вернуть по ссылке новый объект - это динамически выделить его:
int& foo() {
return *(new int);
}
Затем, позже:
delete &myref;
Теперь, конечно, это не обычный способ делать вещи, или то, что люди ожидают, когдаони видят функцию, которая возвращает ссылку.См. Все предупреждения на Удаление ссылки .
Это может иметь некоторый смысл, хотя, если объект является одним из тех, которые "совершают самоубийство" позже, вызываяdelete this
.Опять же, это тоже не типичный C ++.Больше информации об этом на Разрешено ли это удаление? .
Вместо этого, когда вы хотите вернуть объект, созданный внутри функции, вы обычно либо:
- Возврат по значению (возможно, с использованием copy elision ).
- Возвращает динамически размещенный объект (либо возвращает необработанный указатель на него, либо класс, обертывающий его, например,умный указатель).
Но ни один из этих двух подходов не возвращает реальный объект по ссылке.