std::auto_ptr
está roto en VC++ 8 (que es lo que usamos en el trabajo). Mi principal queja es que permite auto_ptr<T> x = new T();
, lo que por supuesto conduce a accidentes horribles, mientras que es fácil de hacer por error.Reemplazando auto_ptr en VC++ 8
Desde un answer a otra pregunta aquí en stackoverflow:
Nota que la aplicación de std :: auto_ptr en Visual Studio 2005 es terriblemente roto. http://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=98871 http://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=101842
Quiero usar
boost::scoped_ptr
, para los punteros que no debe pasar la propiedad.boost::shared_ptr
, para punteros en contenedores y en otros lugares donde se necesiten.std::auto_ptr
, para punteros que deben/pueden pasar la propiedad.
Pero desde std::auto_ptr
se rompe para mí, me pregunto cuál sería el mejor enfoque:
- Reemplazar
std::auto_ptr
con algo de la red. Me gusta esto this uno de Rani Sharoni (no lo he probado todavía). - Use
boost::shared_ptr
en su lugar. Por supuesto, funcionará, aunque habrá algunos gastos menores que no me importan. Pero quiero usarauto_ptr
para señalar la intención del puntero. (Consulte this respuesta para una votación sobre este enfoque.) - Nunca tendré que pasar la propiedad en la práctica, así que no debería preocuparme por esto.
Actualización: Esto es lo que hice: copié la implementación auto_ptr citada por Rani Sharoni. From here.
hizo algunas pruebas menores:
class T
{
public:
T() {
OutputDebugStringA("T\n");
};
~T() {
OutputDebugStringA("~T\n");
};
};
{
fix::auto_ptr<T> x(new T); // This just works.
}
{
fix::auto_ptr<T> x = (new T); // Doesn't compile. Great!
}
{
fix::auto_ptr<T> x = fix::auto_ptr<T>(new T); // Transfer of ownership works also.
}
Por supuesto, estas pruebas son de ninguna manera exhaustiva y no se debe confiar en ellos. Implementar una clase de plantilla segura de excepción es un asunto peliagudo. Al menos esto funciona mejor que el construido en uno.
Nota: No sé si todavía puedo utilizar esta implementación, con respecto a los derechos de autor. He enviado un correo electrónico a Rani y estoy esperando una respuesta. Actualizaré esta publicación cuando sepa más.
Se otorga permiso para que todos puedan usar la implementación auto_ptr de Rani Sharoni como lo deseen.
Gracias por todas sus respuestas.
Pasar la propiedad no es algo que sucede a menudo, pero proporciona una forma clara de auto-documentación como parte del código. –
Esa es exactamente mi idea. Adoro el código de auto-documentación. –