std :: istringstream :: imbue是否拥有传递的对象

时间:2017-06-01 12:25:08

标签: c++ boost

我使用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。显然,如果imbueloc中指针的所有权传递给流,那么当ss超出范围时,它可能会被删除。

我说错了吗?

请参阅http://www.boost.org/doc/libs/1_43_0/doc/html/date_time/date_time_io.html#date_time.format_flags

1 个答案:

答案 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实例执行此操作,该流。