我使用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();
}
(这与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
答案 0 :(得分:4)
简答:不,但是std :: locale对象。
您想要查看http://en.cppreference.com/w/cpp/locale/locale/locale
您正在调用构造函数(重载7)
template< class Facet >
locale( const locale& other, Facet* f );
链接的引用很明确:
通常使用获得的第二个参数f来调用重载7 直接来自new-expression:locale负责调用 从它自己的析构函数中匹配删除。
是的,有些内容会delete
为您提供对象,但它实际上是std::locale
实例执行此操作,不该流。