Mam funkcję korzystającą z biblioteki Boost.DateTime do generowania bieżącego łańcucha daty i czasu GMT/UTC (live example).Kto jest odpowiedzialny za usunięcie aspektu?
std::string get_curr_date() {
auto date = boost::date_time::second_clock<boost::posix_time::ptime>::universal_time();
boost::posix_time::time_facet* facet = new boost::posix_time::time_facet("%a, %d %b %Y %H:%M:%S GMT");
std::ostringstream os;
os.imbue(std::locale(os.getloc(), facet));
os << date;
return os.str();
}
ta opiera się głównie na Boost.DateTime's example:
//example to customize output to be "LongWeekday LongMonthname day, year"
// "%A %b %d, %Y"
date d(2005,Jun,25);
date_facet* facet(new date_facet("%A %B %d, %Y"));
std::cout.imbue(std::locale(std::cout.getloc(), facet));
std::cout << d << std::endl;
// "Saturday June 25, 2005"
Mój kod pracował dobrze, ale teraz czuję się nieswojo z powodu tych konkretnych linii zawierających new
:
boost::posix_time::time_facet* facet = new boost::posix_time::time_facet("%a, %d %b %Y %H:%M:%S GMT");
date_facet* facet(new date_facet("%A %B %d, %Y"));
Jak widać, nie ma delete
w Boost.DateTime jest tak jakoś domniemywać, że jest to konieczne dla mnie delete
date_facet
. Użyłem std::unique_ptr
do zawijania obiektu new
ed time_facet
.
std::unique_ptr<boost::posix_time::time_facet> facet(new boost::posix_time::time_facet("%a, %d %b %Y %H:%M:%S GMT"));
Jednak ja dostaję błędy segfault, jak widać w here. Próbowałem również ręcznie delete
ed wskaźnik delete
i nadal otrzymuję te same błędy (przepraszam, nie można odtworzyć błąd w Coliru).
Wskaźnik time_facet
jest przekazywany jako argument podczas konstruowania obiektu std::locale
, więc jestem zdezorientowany, kto jest odpowiedzialny za aspekt.
Więc tutaj jest sedno mojego pytania:
- Czy jestem zobowiązany do
delete
time_facet
lub jest przedmiotemstd::locale
odpowiedzialny zadelete
ing go?
Uwaga boost::posix_time::time_facet
pochodzi od boost::date_time::date_facet
który z kolei pochodzi od std::locale::facet
. To pytanie może zostać uogólnione na std::locale::facet
, chociaż mój problem jest specyficzny dla time_facet
.
Oto kilka Docs na konstruktorów std::locale
„s:
Oznacza to, że ustawienia regionalne nie mogą być zadeklarowane jako "const static"? – agodinhost