Собственность/удаление грани в локали (std:: locale)
Я написал следующую функцию, чтобы получить строку даты/времени, используя boost.date_time.
namespace bpt = boost::posix_time;
string
get_date_time_string(bpt::ptime time)
{
bpt::time_facet * facet(new bpt::time_facet);
facet->format("%Y%m%d%H%M%S");
stringstream return_value;
return_value.imbue(std::locale(std::locale::classic(), facet));
return_value << time;
return return_value.str();
}
У меня был быстрый вопрос о собственности / delete
'ing объекта facet
. std:: locale constructor не является явным для владельца / delete
'ing facet
. Пробовал использовать shared_ptr
-убранные и стекированные версии facet
- оба из которых вызвали seg-faults. Кроме того, выполнение указанной функции через valgrind не показало никаких утечек (что, вероятно, подразумевает, что язык или поток заботится о delete
'ing), но я просто хотел быть ясным, что делаю здесь правильные вещи. Спасибо.
Ответы
Ответ 1
В соответствии с Stroustrup аргумент 0, переданный конструктору, сообщает facet
, что locale
будет обрабатывать разрушение, и оба конструкторы bpt::time_facet
по умолчанию равны 0, если он не указан. Однако ненулевое значение подразумевает, что программист должен явно обрабатывать уничтожение facet
.