2011-03-16 6 views
15

Escribí la siguiente función para obtener una cadena de fecha y hora usando boost.date_time.Propiedad/eliminación de la faceta en una configuración regional (std :: locale)

namespace bpt = boost::posix_time; 

string 
get_date_time_string(bpt::ptime time) 
{ 
    bpt::time_facet * facet(new bpt::time_facet); 
    facet->format("%Y%m%d%H%M%S"); 

    stringstream return_value; 
    return_value.imbue(std::locale(std::locale::classic(), facet)); 
    return_value << time; 

    return return_value.str(); 
} 

que tenía una pregunta rápida acerca de la propiedad delete 'ing/del objeto facet. std::locale's constructor no está explícito en la propiedad/delete 'ing del facet. Intentó usar shared_ptr -complicó y apiló las versiones asignadas de facet - ambas causaron seg-faults. Además, la ejecución de la función anterior a través de valgrind no mostró ninguna fuga (lo que probablemente implica que la configuración regional o la transmisión se ocupan de delete 'ing), pero solo quería dejar claro que estoy haciendo lo correcto aquí. Gracias.

Respuesta

13

Según Stroustrup, un argumento 0 pasado al constructor le dice al facet que el locale se encargará de la destrucción, y los constructores de ambos bpt::time_facet por defecto a 0 cuando no se suministra. Sin embargo, un valor distinto de cero implica que el programador debe manejar explícitamente la destrucción del facet.

+0

¡Genial! Gracias. [RTFM] (http://www.cplusplus.com/reference/std/locale/locale/facet/), ¿eh? ;) –

+0

No me siento mal, ¡he hecho el mismo tipo de preguntas! – rcollyer

+0

Guau, me gustaría que revisaran esta parte de la biblioteca estándar con el advenimiento C++ 11 .. – Zac

Cuestiones relacionadas