"Если вы возвращаете значение (не ссылку) из функции, а затем связываете его с константной ссылкой в вызывающей функции, его время жизни будет расширено до объема вызывающей функции."
Итак: ДЕЛО A
const BoundingBox Player::GetBoundingBox(void)
{
return BoundingBox( &GetBoundingSphere() );
}
Возвращает значение типа const BoundingBox
из функции GetBoundingBox()
вариант I: (привязать его к константной ссылке)
const BoundingBox& l_Bbox = l_pPlayer->GetBoundingBox();
вариант II: (связать его с константной копией)
const BoundingBox l_Bbox = l_pPlayer->GetBoundingBox();
Оба работают нормально, и я не вижу, как объект l_Bbox
выходит из области видимости. (Хотя, как я понимаю, в первом варианте конструктор копирования не вызывается, и поэтому он немного лучше, чем в варианте II).
Также для сравнения я внес следующие изменения.
ДЕЛО B
BoundingBox Player::GetBoundingBox(void)
{
return BoundingBox( &GetBoundingSphere() );
}
с вариантами:
I
BoundingBox& l_Bbox = l_pPlayer->GetBoundingBox();
и II:
BoundingBox l_Bbox = l_pPlayer->GetBoundingBox();
Объект l_Bbox
все еще не выходит за рамки. Как «связать его с константной ссылкой в вызывающей функции, его время жизни будет расширено до объема вызывающей функции», действительно продлить время жизни объекта до объема вызывающей функции?
Я что-то упускаю здесь тривиально?