拥有/删除区域设置中的构面(std :: locale)

时间:2011-03-16 19:09:41

标签: c++ boost locale facet boost-date-time

我编写了以下函数来使用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对象的所有权/ facet的快速提问。 std::locale's constructor未明确delete的所有权/ facet。尝试使用shared_ptr - 包装和堆栈分配的facet版本 - 两者都导致了seg-fault。此外,通过valgrind运行上述函数没有显示任何泄漏(这可能意味着语言环境或流正在处理delete'),但我只是想清楚我正在做正确的事情这里。感谢。

1 个答案:

答案 0 :(得分:14)

根据Stroustrup,传递给构造函数的0参数告诉facet locale将处理销毁,bpt::time_facet的两个构造函数默认为0它没有供应。但是,非零值意味着程序员必须明确处理facet的破坏。