我编写了以下函数来使用 boost.date_time 获取日期/时间字符串.
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
-wrapped 和堆栈分配的 facet
版本 - 这两者都导致了段错误。此外,通过 valgrind 运行上述函数并没有显示任何泄漏(这可能意味着语言环境或流正在处理 delete
'ing),但我只是想清楚我正在做正确的事情在这里。谢谢。
最佳答案
根据Stroustrup ,传递给构造函数的 0 参数告诉 facet
locale
将处理销毁,并且 bpt::time_facet
的两个构造函数默认为未提供时为 0。但是,非零值意味着程序员必须显式处理 facet
的销毁。
关于c++ - 所有权/删除区域设置中的构面(std::locale),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5330459/