2011-03-16 27 views
15

我编写了以下函数以使用boost.date_time来获取日期/时间字符串。所有权/删除区域设置(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(); 
} 

我不得不对facet对象的所有权/ delete“ING一个简单的问题。 std::locale's constructor没有明确说明facet的所有权/ delete。尝试使用shared_ptr包装和堆栈分配版本facet - 这两个版本都导致了seg-fault。此外,通过valgrind运行上述功能没有显示任何泄漏(这可能意味着区域或流正在照顾delete'ing),但我只想清楚,我在这里做的是正确的事情。谢谢。

回答

13

根据Stroustrup,0参数传递给构造告诉facetlocale将处理破坏,bpt::time_facet默认为0,两个构造时不提供它。然而,非零值意味着程序员必须明确处理销毁facet

+0

太棒了!谢谢。 [RTFM](http://www.cplusplus.com/reference/std/locale/locale/facet/),嗯?! ;) – 2011-03-17 17:48:10

+0

不要觉得不好,我问过同样类型的问题! – rcollyer 2011-03-17 19:23:27

+0

哇,我希望他们会重新访问标准库的这部分与出现C + + 11 .. – Zac 2013-10-02 19:02:12

相关问题