我正在使用 Boost 将“01-Jan-2000”形式的日期转换为儒略数。我这样做的方法是使用
int toJulian(std::string date)
{
std::locale loc = std::locale(std::locale::classic(), new boost::posix_time::time_input_facet("%d-%b-%Y"));
std::istringstream ss(date);
ss.imbue(loc);
boost::posix_time::ptime p;
ss >> p;
return p.date().julian_day();
}
Run Code Online (Sandbox Code Playgroud)
(这与 Boost 文档中的示例一致)。
但我不清楚这是否会泄漏内存。我没有明确的delete。显然,如果imbue将指针的所有权传递给loc流,那么当ss超出范围时它可能会被删除。
我对么?
请参阅http://www.boost.org/doc/libs/1_43_0/doc/html/date_time/date_time_io.html#date_time.format_flags
简短的回答:不,但是 std::locale 对象可以。
您想查看http://en.cppreference.com/w/cpp/locale/locale/locale
您正在调用构造函数(重载 7)
template< class Facet >
locale( const locale& other, Facet* f );
Run Code Online (Sandbox Code Playgroud)
链接参考很清楚:
重载 7 通常使用其第二个参数 f 进行调用,该参数直接从 new 表达式获取:语言环境负责从其自己的析构函数中调用匹配的删除。
所以,是的,有些东西会delete为你提供对象,但实际上是实例std::locale而不是流。