make_unique - unique pointer c++




Zeiger in einer std:: map richtig löschen (2)

Ich habe eine Karte als deklariert

std::map<std::string, Texture*> textureMap;

Das verwende ich für die Paarung des Pfades zu einer Texturdatei mit der tatsächlichen Textur, so dass ich die Textur durch den Pfad referenzieren kann, ohne dieselbe Textur ein paar Mal für einzelne Sprites zu laden. Was ich nicht kann, ist, die Texturen im Destruktor für die ResourceManager-Klasse (wo die Map ist) ordnungsgemäß zu zerstören.

Ich dachte über eine Schleife mit einem Iterator wie folgt nach:

ResourceManager::~ResourceManager()
{
    for(std::map<std::string, Texture*>::iterator itr = textureMap.begin(); itr != textureMap.end(); itr++)
    {
        delete (*itr);
    }
}

Aber das funktioniert nicht, es sagt Löschen erwartet einen Zeiger. Es ist ziemlich spät, also verpasse ich nur etwas Offensichtliches, aber ich wollte das vor dem Schlafengehen erledigen. Bin ich also nahe dran oder bin ich dabei total in die falsche Richtung?


Die Antwort hat das Schleifenproblem nicht vollständig gelöst. Zumindest erlaubt Coverty (TM) nicht, den Iterator innerhalb der Schleife zu löschen und ihn weiterhin zum Fortsetzen der Schleife zu verwenden. Nach dem Löschen des Speichers sollte der Aufruf von clear () auf der Karte den Rest erledigen:

ResourceManager::~ResourceManager()
{
    for(std::map<std::string, Texture*>::iterator itr = textureMap.begin(); itr != textureMap.end(); itr++)
    {
        delete (itr->second);
    }
    textureMap.clear();
}





destructor