私はエンジンのイメージハンドラを作成しています。これまでのところかなり良い(私は思う)が、私は画像を削除すると助けが必要です。私はvector
の経験がありますが、map
ではありません。イメージハンドラクラスのstd :: mapヘルプ
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つの方法の根性ある
画像ハンドラは、2つの要素を持っているのstd ::マップを持っています:
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*);
だから私は、私はイテレータの二にアクセスする必要があると思います要素を特定のマップインデックスに追加します。これまでのところ私はそれをやっていますか?これをどうすればできますか?
SDL_FreeSurface(IT->秒)。 image_list_.erase(it); – Jagannath