gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 20:52:58 26 4
gpt4 key购买 nike

我正在使用 Boost 将“2000 年 1 月 1 日”形式的日期转换为儒略数。我这样做的方法是使用

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

最佳答案

简短回答:不,但 std::locale 对象可以

您想查看 http://en.cppreference.com/w/cpp/locale/locale/locale

你正在调用构造函数(重载 7)

template< class Facet >
locale( const locale& other, Facet* f );

链接引用清晰:

Overload 7 is typically called with its second argument, f, obtained directly from a new-expression: the locale is responsible for calling the matching delete from its own destructor.

所以是的,某些东西会为您删除对象,但实际上是 std::locale 实例执行此操作,不是流。

关于c++ - std::istringstream::imbue 是否拥有传递的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44307492/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com