Devolver objeto de la función

Ahora estoy realmente confundido sobre cómo y qué método usar para devolver el objeto de una función. Quiero algunos comentarios sobre las soluciones para los requisitos dados.

Escenario A: el objeto devuelto debe almacenarse en una variable que no necesita modificarse durante su vida útil. Así,

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

invocado como:

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

Scneraio B: El objeto devuelto debe almacenarse en una variable que se modificará durante su vida útil. Así,

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

invocado como:

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

Tengo una pregunta aquí: Digamos que Foo no puede tener un constructor predeterminado. Entonces, ¿cómo lidiarías con eso en esta situación, ya que ya no podemos escribir esto?

Foo l_Foo

Escenario C:

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

invocado como:

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

Creo que este no es el enfoque recomendado ya que incurriría en la construcción de temporarios adicionales.

Qué piensas ? Además, ¿recomienda una mejor manera de manejar esto?

Respuestas a la pregunta(2)

Su respuesta a la pregunta