c++ - 所有权/删除区域设置中的构面(std::locale)

标签 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();
}

我有一个关于 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/

相关文章:

c++ - 可移植写入器-读取器自旋锁

c++ - 使用 boost 图创建结构

java - Java 中不存在语言环境

utf-8 - 为什么即使设置了语言环境也会出现错误?

c++ - 在它后面找到 Word + X 个字母

c++ - 通过 "const int"指针更改 "int *"。惊喜又有趣

c++ - 回想起来,将 'this' 设为引用而不是指针会更好吗?

c++ - boost::multi_index_container:从任意索引取equal_range,只执行一次循环

android - 如何更改语言环境?不适用于某些设备

c++ - OpenCV.norm 断言错误