Посмотрите на этот кусок кода:Когда создавать объекты в куче и стеке?
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
объекты малы)
благодаря
Лучше использовать 'зОго :: set' с пользовательским компаратором вместо этого. – Deduplicator
'std :: map' по умолчанию сохраняет свои фактические данные из бесплатного хранилища (кучи). Столбец займет только небольшая ручка. – Galik
Если у вас есть C++ 11, вы можете использовать 'profilers.emplace()' для уменьшения копирования. – Galik