Me gustaría saber qué se considera hoy en día mejor práctica al devolver un puntero a un objeto polimórfico de una función, por ejemplo, al usar fábricas. Si transfiero la propiedad, ¿debo devolver boost::unique_ptr<Interface>
? ¿Qué debo devolver si no transfiero la propiedad (por ejemplo, devolver una referencia a un miembro)? ¿Existe una alternativa, no basada en el impulso que también se usa comúnmente? Gracias.Devolución de objetos polimórficos C++ (interfaces)
EDIT: se supone que es compatible con C++ 03, con la posibilidad de actualizar fácilmente a 0x
Edit2: Tenga en cuenta que estoy pidiendo explícitamente sobre enfoques comunes, mejores prácticas, y no sólo "una manera de hacer esto". Una solución que implique una búsqueda y reemplazo condicional sobre la base del código en el futuro no parece una buena práctica, ¿o sí?
EDIT3: Otro punto acerca de auto_ptr es que está obsoleto, sea lo que sea, por lo que parece extraño anunciar su uso en el nivel de interfaz. Entonces, alguien que no lo sepa colocará el puntero devuelto en un contenedor STL, y así sucesivamente. Entonces, si conoce otra solución que de alguna manera es común, puede agregar una respuesta.
Puede quejarse todo lo que desee acerca de cómo ':: std :: auto_ptr' está en desuso, el hecho es que no se puede mejorar sin la sobrecarga, o el estrechamiento de la interfaz. Si usa ':: std :: tr1 :: shared_ptr' obtendrá recuento de referencias cuando no lo necesite. Realmente ':: std :: auto_ptr' es la única solución razonable disponible en C++. ':: boost :: unique_ptr' simplemente elimina las operaciones problemáticas de' :: std :: auto_ptr'. Y aunque algunos podrían considerarlo mejor, es una biblioteca de terceros, y no podría recomendar el uso de una biblioteca de terceros como una "mejor práctica" a menos que no hubiera otra alternativa. – Omnifarious
@Omnifarious: Agradezco su respuesta, pero también estoy tratando de alentar a otras personas a compartir su opinión. –
¿Hay alguna razón por la que no esté considerando 'shared_ptr' para esto? –