我有一個函數使用Boost.DateTime庫來生成當前的GMT/UTC日期和時間字符串(live example)。誰負責刪除方面?
std::string get_curr_date() {
auto date = boost::date_time::second_clock<boost::posix_time::ptime>::universal_time();
boost::posix_time::time_facet* facet = new boost::posix_time::time_facet("%a, %d %b %Y %H:%M:%S GMT");
std::ostringstream os;
os.imbue(std::locale(os.getloc(), facet));
os << date;
return os.str();
}
這主要是基於Boost.DateTime's example:
//example to customize output to be "LongWeekday LongMonthname day, year"
// "%A %b %d, %Y"
date d(2005,Jun,25);
date_facet* facet(new date_facet("%A %B %d, %Y"));
std::cout.imbue(std::locale(std::cout.getloc(), facet));
std::cout << d << std::endl;
// "Saturday June 25, 2005"
我的代碼工作很好,但我現在因爲含有new
這些特定的行感到惶恐:
boost::posix_time::time_facet* facet = new boost::posix_time::time_facet("%a, %d %b %Y %H:%M:%S GMT");
date_facet* facet(new date_facet("%A %B %d, %Y"));
正如你所看到的,有中沒有delete
Boost.DateTime的,所以我莫名其妙地推測,當務之急是爲我delete
的date_facet
。我用std::unique_ptr
來包裝new
ed time_facet
對象。
std::unique_ptr<boost::posix_time::time_facet> facet(new boost::posix_time::time_facet("%a, %d %b %Y %H:%M:%S GMT"));
但是,我得到段錯誤,您可以在here中看到。我也試過手動編輯new
ed指針,並且仍然得到相同的錯誤(抱歉,無法在Coliru中重現錯誤)。
time_facet
指針在構造std::locale
對象時作爲參數傳遞,所以我很困惑誰負責delete
這個方面。
因此,這裏是我的問題的核心:
- 我必須對
delete
的time_facet
或者是std::locale
對象負責delete
荷蘭國際集團呢?
請注意,boost::posix_time::time_facet
從boost::date_time::date_facet
這,反過來,從std::locale::facet
得出的。這個問題可能概括爲std::locale::facet
,雖然我的問題是特定於time_facet
。
這裏是std::locale
的構造一些文檔:
這意味着locale不能被聲明爲'const static'嗎? – agodinhost