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

Pau*_*gue 4 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();
}
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

Bat*_*eba 5

简短的回答:不,但是 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不是流。