Возврат объекта из функции

Я действительно запутался сейчас в том, как и какой метод использовать для возврата объекта из функции. Я хочу получить отзывы о решениях для данных требований.

Сценарий A: возвращаемый объект должен храниться в переменной, которую не нужно изменять в течение срока ее службы. Таким образом,

const Foo SomeClass::GetFoo() {
 return Foo(); 
}

вызывается как:

someMethod() {
 const Foo& l_Foo = someClassPInstance->GetFoo();
//...
}

Scneraio B: возвращаемый объект должен быть сохранен в переменной, которая будет изменена в течение срока его службы. Таким образом,

void SomeClass::GetFoo(Foo& a_Foo_ref) {
     a_Foo_ref = Foo(); 
    }

вызывается как:

someMethod() {
 Foo l_Foo;
 someClassPInstance->GetFoo(l_Foo);
//...
}

У меня есть один вопрос: допустим, у Foo не может быть конструктора по умолчанию. Тогда как бы вы справились с этим в этой ситуации, поскольку мы больше не можем писать это:

Foo l_Foo

Сценарий C:

Foo SomeClass::GetFoo() {
 return Foo(); 
}

вызывается как:

someMethod() {
 Foo l_Foo = someClassPInstance->GetFoo();
//...
}

Я думаю, что это не рекомендуемый подход, поскольку он повлечет за собой создание дополнительных временных.

Как вы думаете ? Кроме того, вы рекомендуете лучший способ справиться с этим вместо этого?

Ответы на вопрос(2)

Ваш ответ на вопрос