Следующий код преобразует std::string
в boost::posix_time::ptime
.Преобразование std :: string для boost :: posix_time :: ptime
После профилирования я увидел, что большая часть времени, проведенного в этой функции (около 90%), напрасно направляется на выделение памяти для time_input_facet
. Я должен признать, что я не совсем понимаю следующий код, и специально, почему time_input_facet
должен быть выделен в свободной памяти.
using boost::posix_time;
const ptime StringToPtime(const string &zeitstempel, const string &formatstring)
{
stringstream ss;
time_input_facet* input_facet = new time_input_facet();
ss.imbue(locale(ss.getloc(), input_facet));
input_facet->format(formatstring.c_str());
ss.str(zeitstempel);
ptime timestamp;
ss >> timestamp;
return timestamp;
}
вы видите какой-либо способ, чтобы избавиться от выделения ли?
Я не понимаю, кто называет 'delete' для' time_input_facet'? Могу ли я использовать один и тот же 'time_input_facet' для многих разных конверсий с разными строками формата? – nabulke
[std :: locale] (http://en.cppreference.com/w/cpp/locale/locale/~locale) вызывает удаление для вас. –
Да, input_facet никогда не разрушается (только на выходе программы). Это небольшая цена для оплаты, если она улучшает производительность на 90% путем удаления избыточных распределений. Конечно, вы можете сделать его статическим глобальным или членом класса, поэтому он будет разрушен должным образом. –