我有一个使用 Boost.DateTime 库生成当前 GMT/UTC 日期和时间字符串的函数(现场示例)。
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 的示例:
//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"));
正如你所看到的,Boost.DateTime 中没有delete
,所以我以某种方式假设我必须delete
将date_facet
. 我曾经std::unique_ptr
包装new
edtime_facet
对象。
std::unique_ptr<boost::posix_time::time_facet> facet(new boost::posix_time::time_facet("%a, %d %b %Y %H:%M:%S GMT"));
但是,正如您在此处看到的那样,我收到了段错误错误。我也尝试过手动delete
设置new
ed 指针,但仍然遇到相同的错误(抱歉,无法在 Coliru 中重现错误)。
指针在time_facet
构造对象时作为参数传递std::locale
,所以我很困惑谁是负责delete
ing 方面的人。
所以这是我问题的核心:
- 我是否需要
delete
它time_facet
或std::locale
对象负责delete
它?
请注意,boost::posix_time::time_facet
源自boost::date_time::date_facet
which 又源自std::locale::facet
. 尽管我的问题std::locale::facet
是特定于time_facet
.
std::locale
以下是关于的构造函数的一些文档: