Взгляните на этот фрагмент кода:
class Profiler{
const std::string id;
public:
Profiler(const std::string id);
Profiler(const Profiler &t);
//...
}
затем где-то в коде:
std::map<const std::string, Profiler> profilers;
и где-то еще я заполняю контейнер как:
profilers.insert(std::pair<const std::string, Profiler>(id, Profiler(id)));
Вышеупомянутая строка только что вызывала constructor
и copy constructor
3 раза в общей сложности. один для создания временного Profiler
, один для создания pair
и один для insert
, верно? profilers[id] = Profiler(id);
также имеет такое же количество вызовов.
- есть ли способ уменьшить это число?
- разве не дешевле (в любых терминах) правильно изменить подписи, чтобы создать
Profiler
в куче и сохранить его адрес вmap
? (Profiler
объектов маленькие)
Благодарность
std::set
с настраиваемым компаратором. - person Deduplicator   schedule 11.09.2014std::map
по умолчанию будет хранить свои фактические данные из свободного хранилища (кучи). Стек займет лишь небольшая ручка. - person Galik   schedule 11.09.2014profilers.emplace()
, чтобы уменьшить количество копий. - person Galik   schedule 11.09.2014