Я пишу обработчик изображений для движка. Пока все идет хорошо (я думаю), но мне нужна помощь с удалением изображений. У меня есть опыт работы с vector
с, но не с map
с.
В обработчике изображений есть std :: map, который имеет 2 элемента:
std::map<std::string, SDL_Surface*> image_list_;
std::map<std::string, SDL_Surface*>::iterator it;
Тогда у меня есть 2 метода в моем классе ImageHandler:
void AddImage(std::string/*file_name*/);
void DeleteImage(std::string/*file_name*/);
Вот смелость этих 2 методов:
bool ImageHandler::AddImage(std::string file_name)
{
SDL_Surface* temp = NULL;
if ((temp = Image::Load(file_name)) == NULL)
return false;
image_list_.insert(std::pair<std::string, SDL_Surface*>(file_name, temp));
SDL_FreeSurface(temp);
return true;
}
bool ImageHandler::DeleteImage(std::string file_name)
{
if (image_list_.empty()) return;
it = image_list_.find(file_name);
if (!it) return false;
image_list_.erase(it);
return true;
}
Я не скомпилировал этот код, поэтому я не знаю никаких синтаксических ошибок. Если таковые существуют, вы можете просто посмотреть мимо них.
Я думаю, мой метод DeleteImage
удалит его из map
, но чтобы избежать утечек памяти при загрузке изображения, мне нужно сделать следующее:
SDL_FreeSurface(SDL_Surface*);
Так что я думаю, что мне нужен доступ к элементу second итератора по определенному индексу карты. До сих пор я делаю это правильно и как я могу это сделать?