2016-03-22 22 views
1

Bitte beachten Sie MyHashMap ist meine angepasste hashmap. die Funktionalität ist das gleiche wie Std: hashmap Bitte beachten Sie MyVector ist Form von std :: vector anpassen. Die Funktionalität ist die gleiche wie std: Vektorist es in Ordnung, Vektor in einem Destruktor zu löschen

Ich will nicht Zeiger der M-Klasse M * korrekte

ist der folgende Code löschen oder yo sieht ein Problem in den gleichen

A::~A() { 
    EMapItr eMItr = p_Map.beginRandom(); 
    for(; eMItr; ++eMItr) { 
     delete eMItr.value(); 
    } 
} 

Auch tun wir den Vektor wie unten oder es wird automatisch versorgt E :: ~ E() { mv.clear() }

+0

Ihr benutzerdefinierter Iterator 'EMapItr' bricht C++ 11 for-Schleifen. Insbesondere geht C++ 11 nun davon aus, dass Container eine Methode namens _exactly_ 'begin()' haben. Nicht 'beginRandom'. Sie können immer noch mehrere Möglichkeiten haben, einen einzelnen Container mit einem kleinen Trick zu durchlaufen: 'p_Map.randomView.begin()'. – MSalters

Antwort

5

Standardbibliothek Behälter müssen nicht in Destruktoren löschen müssen gelöscht werden weil sie sich um ihr eigenes Speichermanagement kümmern. Es ist am besten, das gleiche mit benutzerdefinierten Containern zu tun, da dies allgemein erwartet wird und sowieso der beste Weg ist, Speicherprobleme zu vermeiden.

Verwandte Themen