Возврат объекта из функции
Я действительно запутался сейчас в том, как и какой метод использовать для возврата объекта из функции. Я хочу получить отзывы о решениях для данных требований.
Сценарий 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();
//...
}
Я думаю, что это не рекомендуемый подход, поскольку он повлечет за собой создание дополнительных временных.
Как вы думаете ? Кроме того, вы рекомендуете лучший способ справиться с этим вместо этого?