繁体   English   中英

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

[英]Ownership/delete'ing the facet in a locale (std::locale)

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM