У меня есть функция, которая использует библиотеку Boost.DateTime для генерации текущей даты и времени GMT/UTC (live example).Кто несет ответственность за удаление фасета?
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();
}
Это в основном базируется на 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"
Мой код работает хорошо, но теперь я чувствую себя неловко из-за этих конкретных строк, содержащих 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"));
Как вы можете видеть, не существует ни в коем delete
Boost.DateTime так я как-то предположил, что это важно для меня delete
date_facet
. Я использовал std::unique_ptr
для обертывания объекта 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"));
Однако я получаю Segfault ошибок, как вы можете видеть в here. Я также попробовал вручную delete
с указателем new
ed, и все еще получаю те же ошибки (извините, не могу воспроизвести ошибку в Coliru).
Указатель time_facet
передается в качестве аргумента при создании объекта std::locale
, поэтому я смущен тем, кто ответственен за фасетку delete
.
Так вот суть моего вопроса:
- Требуется ли
delete
time_facet
или являетсяstd::locale
объект отвечает заdelete
ИНГ его?
Пожалуйста, обратите внимание, что boost::posix_time::time_facet
происходит от boost::date_time::date_facet
, который, в свою очередь, полученный из std::locale::facet
. Этот вопрос может быть обобщен на std::locale::facet
, хотя моя проблема связана с time_facet
.
Вот некоторые документы на конструкторах std::locale
«s:
Это означает, что язык не может быть объявлен как «const static»? – agodinhost