2011-03-16 49 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

相關問題