16

我编写了以下函数来使用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();
}

delete我有一个关于对象的所有权/ 'ing 的快速问题facetstd::locale 的构造函数deletefacet. 尝试使用shared_ptr-wrapped 和堆栈分配的版本facet- 两者都导致 seg-faults。此外,通过 valgrind 运行上述函数并没有显示任何泄漏(这可能意味着语言环境或流正在处理delete'ing),但我只是想清楚我在这里做的是正确的事情。谢谢。

4

1 回答 1

14

根据Stroustrup,传递给构造函数的 0 参数告诉构造函数facetlocale处理销毁,并且两个构造函数在bpt::time_facet未提供时默认为 0。但是,非零值意味着程序员必须显式处理facet.

于 2011-03-16T19:33:48.993 回答