Почему возврат по ссылке быстрее, чем возврат по значению?
class A
{
int x,y;
public:
A(int a=0,int b=0)
{x=a;y=b;}
/* ... */
}
A& fctr()
{
A loc(1,2);
return loc;
}
Давайте рассмотрим эту инструкцию:
A x=fctr();
fctr()
возвращая ссылку на уничтоженный объект... << это не проблема -_-
В приведенной выше инструкции и на основе ссылки, возвращаемой fctr, программа копирует уничтоженный объект loc в x.
С другой стороны, возвращая по значению, скопируйте объект loc в x!!
Единственное отличие, которое я вижу, заключается в том, что при возврате по ссылке объект loc уничтожается, но при возврате по значению объект loc не уничтожается до тех пор, пока инструкция не будет завершена.
Поэтому возврат по значению кажется безопасным, и он делает то же самое, что возврат по ссылке!!
Что я читаю в книгах и что я слышал от людей, так это то, что возвращение по ссылке происходит быстрее, чем возвращение по значению...
Так почему возврат по ссылке быстрее, чем по значению?
... Я думаю, что я неправ в чем-то, но я не знаю, что это?!!!
1 ответ
Возврат по ссылке - Системе не нужно выделять и инициализировать дополнительную память. Просто нужно передать адрес памяти уже существующего местоположения.
Возврат по значению - Системе необходимо выделить и инициализировать дополнительную память.
Это полностью зависит от требований, нужно ли вам "по ссылке" или "по стоимости".