Если EnemySprite
или tmp
не определено как макрос, EnemySprite tmp(x,y,40,40);
- это локальная переменная, которая будет уничтожена в конце области видимости (в этом случае в конце одной итерации).
To Избегайте удаления, вы должны динамически выделять память.
EnemySprite* tmp = new EnemySprite(x,y,40,40);
SDL_Texture* tmpTex = tmp->set_image(".../enemy.png",renderer);
map.insert(std::pair<EnemySprite*, SDL_Texture*>(tmp, tmpTex));