У меня есть функция, которая переводит данные, используя зЬй :: Картастанд :: Карта inizialitazion (только один раз)
struct HistoParameter
{
int nbins;
float first;
float last;
HistoParameter(int _nbins, int _first, int _last) :
nbins(_nbins), first(_first), last(_last) {};
};
HistoParameter* variable_to_parameter(char* var_name)
{
std::map<const std::string, HistoParameter*> hp;
hp[std::string("ph_pt")] = new HistoParameter(100,0,22000);
hp[std::string("ph_eta")] = new HistoParameter(100,-3,3);
// ...
return hp[var_name];
}
Моя структура очень легкий, но изображение может быть тяжелым. Пролет состоит в том, что каждый раз, когда я вызываю эту функцию, он создает много объектов HistoParameter, возможно, более эффективен случай переключения. Первый вопрос: я создаю мусор?
Второе решение:
bool first_time = true;
HistoParameter* variable_to_parameter(char* var_name)
{
static std::map<const std::string, HistoParameter*> hp;
if (first_time)
{
hp[std::string("ph_pt")] = new HistoParameter(100,0,22000);
hp[std::string("ph_eta")] = new HistoParameter(100,-3,3);
// ...
}
first_time = false;
return hp[var_name];
это нормально? Лучшее решение?
Хех, те же идеи, но ты избил меня на make_pair. Забыл, что там не только make_tuple -_-. –
Мне нравится ht.empty(), потому что я не могу использовать глобальную переменную. Я использую указатель, потому что в будущем этот класс может стать совсем другим и тяжелым. –
Ну, вы можете внести это изменение, когда и если это станет необходимым - это одна из основных причин использования инкапсуляции. Как бы то ни было, если вы не используете интеллектуальные указатели, у вас есть проблемы с утечкой ресурсов. Поскольку карта статична, это может быть неважно, но все же ... – 2010-01-25 22:30:19