Ich suchte StackOverflow, aber konnte die Antwort auf diese Frage nicht finden.Was ist der richtige Weg, um einen Zeiger std :: Zeiger in C++ zu befreien?
Angenommen, ich habe eine std::vector<Day *> vector_day
- das heißt - ein Vektor von Zeigern zu Day
Objekt. Jetzt habe ich push_back
zu vector_day
viele Elemente:
vector_day.push_back(new Day(12));
vector_day.push_back(new Day(99));
vector_day.push_back(new Day(71));
...
jetzt irgendwann nicht mehr brauche ich vector_day
. Was ist der richtige Weg, um die Erinnerung zu befreien?
Es dies der richtige Weg:
for (std::vector<Day *>::iterator i = vector_day.begin(); i != vector_day.end(); ++i) {
delete *i;
}
Enthält diese auf jedem Löschen des Vektors nicht ungültig machen? Ich bin sehr verwirrt.
Kann ein Betrogene von http://stackoverflow.com/questions/3054567/right-way-to-deallocate-an-stdvector-object –
RC - nicht wirklich, das ist völlig anders. – bodacydo
Zeig nicht so hinein. Was passiert, wenn eine Ausnahme zwischen der Zeit, in der sich das Material im Vektor befindet, und dem Ort, an dem Sie alles löschen, geworfen wird? Du würdest es überspringen und undicht werden. Verwenden Sie einen intelligenten Zeiger oder einen Zeigercontainer, niemals rohe Zeiger. – GManNickG