私はBoostを使用して、 "01-Jan-2000"という形式の日付をジュリアン番号に変換しています。私がこれを行う方法は、使用することです。std :: istringstream :: imbueは渡されたオブジェクトを所有していますか
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
が範囲外になると削除されます。
正しいですか? ありませんが、のstd ::ロケールオブジェクトは、を行います。
はhttp://www.boost.org/doc/libs/1_43_0/doc/html/date_time/date_time_io.html#date_time.format_flags
cppreferenceの例では、 'Facet'も削除されていないようです。それに言及していないことに興味があります。通常、私は未加工のポインタが所有していないことを意味すると思います... –
@BartekBanachewicz:これであなたの雷を盗んだ:cppreference.comにはロケールの削除を示すメモがあります。 – Bathsheba