2014-09-11 2 views
0

Посмотрите на этот кусок кода:Когда создавать объекты в куче и стеке?

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 constructor3 раза всего. один для создания временного Profiler, один для создания pair и один для insert? profilers[id] = Profiler(id); также имеет такое же количество приглашений.

  1. есть ли способ уменьшить это число?
  2. не дешевле (в любых условиях) правильно изменить подписи , чтобы создать Profiler в куче и сохранить его адрес в map? (Profiler объекты малы)

благодаря

+0

Лучше использовать 'зОго :: set' с пользовательским компаратором вместо этого. – Deduplicator

+0

'std :: map' по умолчанию сохраняет свои фактические данные из бесплатного хранилища (кучи). Столбец займет только небольшая ручка. – Galik

+1

Если у вас есть C++ 11, вы можете использовать 'profilers.emplace()' для уменьшения копирования. – Galik

ответ

Смежные вопросы