Собственность/удаление грани в локали (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.