所有权/删除区域设置(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 ::区域的构造上没有所有权明确/ delete
“了的ING facet
。 尝试使用shared_ptr
-wrapped和堆栈中分配的版本facet
-两者都导致赛格故障。 另外,通过valgrind运行上面的函数并没有显示任何泄漏(这可能意味着语言环境或流正在处理delete
),但我只是想清楚我在这里做的是正确的事情。 谢谢。
根据Stroustrup的说法,传递给构造函数的0参数告诉facet
, locale
将处理销毁,并且bpt::time_facet
的两个构造函数在未提供时默认为0。 然而,一个非零值意味着程序员必须明确地处理对facet
的破坏。
上一篇: Ownership/delete'ing the facet in a locale (std::locale)