Ahora estoy realmente confundido sobre cómo y qué método usar para devolver el objeto de una función. Quiero retroalimentación sobre las soluciones para los requisitos dados.Devolver objeto desde la función
Escenario A: El objeto devuelto debe almacenarse en una variable que no necesita modificarse durante su vida útil. Por lo tanto,
const Foo SomeClass::GetFoo() {
return Foo();
}
invocarse como:
someMethod() {
const Foo& l_Foo = someClassPInstance->GetFoo();
//...
}
Scneraio B: El objeto devuelto es para ser almacenado en una variable que se modifica durante su vida útil. Por lo tanto,
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 por defecto. Entonces ¿cómo hacer frente a que en esta situación, ya que puedo escribir esto más:
Foo l_Foo
Escenario C:
Foo SomeClass::GetFoo() {
return Foo();
}
invocado como:
someMethod() {
Foo l_Foo = someClassPInstance->GetFoo();
//...
}
pienso este no es el enfoque recomendado, ya que incurriría en la construcción de temporales adicionales.
¿Qué opinas? Además, ¿me recomiendan una mejor manera de manejar esto en su lugar?
http://en.wikipedia.org/wiki/Return_value_optimization – vladr
escenario A está bien, pero realmente no hay mejora con respecto a C.Usaría C a menos que el constructor predeterminado de Foo sea "rápido", la copiadora de Foo sea "lenta" y no quiera confiar en que el compilador sea lo suficientemente inteligente para eludir las copias innecesarias, en cuyo caso B también es aceptable. – sellibitze
tenga en cuenta que 'a_Foo_ref = Foo();' crea un objeto y realiza una copia. Es casi equivalente al último escenario – Anycorn