Это возможно с константной ссылкой.
myFunction
возвращает значение, поэтому возвращаемое значение является временным объектом. Вы можете привязать временную ссылку к константной ссылке, и время жизни временной привязки увеличивается до времени жизни ссылки. Вы не можете привязать временную ссылку к неконстантной ссылке (к сожалению).
Возвращаемое значение myFunction
может быть копией из myObject
. С положительной стороны, elision конструктора копирования (в данном случае «именованная оптимизация возвращаемого значения») позволяет компилятору создавать myObject
непосредственно во временное значение, которое является возвращаемым значением myFunction
, предположительно расположенным где-то в стеке вызывающий код. Если это так, то когда myObject
выходит из области видимости, объект фактически не уничтожается. Оптимизация обычно реализуется - например, GCC (обычно?) Делает это даже без каких-либо флагов оптимизации.
Copy ctor elision также позволяет компилятору избежать копирования, если вы это сделали:
A mySecondObject = myFunction();
Для этого требуется применение обоих допустимых типов копирования ctor: (1) возврат именованного значения из функции и (2) инициализация объекта из временного.