Ich kenne nur ein paar Umstände, unter denen Sie verwenden: data[i]->~Class();
. Zum einen verwenden Sie Placement neu, um ein Objekt an diesem Ort zu erstellen. Die andere besteht darin, dass Sie ein Objekt neu initialisieren, indem Sie es zerstören, und sofort gefolgt von der Verwendung von placement new, um dort ein neues Objekt zu erstellen. Beide sind ziemlich fortgeschrittenen Techniken, und ganz ehrlich gesagt, eher ungewöhnlich, außer wenn Sie erstellen eine eigene Sammlung Klasse.
Meine Vermutung ist, dass 1) du das nicht brauchst, und 2) du hast uns nicht wirklich den Code gezeigt, der wichtig ist (was wahrscheinlich der Inhalt ist, der den expliziten dtor-Aufruf umgibt).
Sie haben Sie eine andere kleinere Problem bei Aufteilung name
mit new[]
, und es mit delete name;
Löschen - die beiden zusammenpassen sollten, so dass Sie delete [] name;
verwenden sollten. Angesichts der Tatsache, dass es sich um ein Array von char
handelt, handelt es sich jedoch hauptsächlich um eine technische Eigenschaft, die in diesem Fall höchstwahrscheinlich kein Problem verursachen wird. Wenn es sich um ein Array von Objekten mit nicht-trivialen Destruktoren handelt, wäre das typische Symptom, dass einige (die meisten) Objekte nicht ordnungsgemäß zerstört wurden (d. H. Ihre Destruktoren würden nicht aufgerufen). In der Theorie ist es nur undefiniertes Verhalten, also kann alles geschehen, aber die wirklichen Chancen davon, die Quelle Ihres Problems zu sein, sind extrem entfernt (besonders, wie ich sagte, im Falle eines Arrays von char
).
Natürlich, was Sie wirklich tun sollten, ist name
ein std::string
machen und den ganzen Unsinn völlig überspringen.
Für diese Art von Fehler lohnt es sich normalerweise, unter valgrind zu laufen, um mehr Informationen darüber zu bekommen, was das Problem verursacht.(Aber ich vermute, dass die bereits geposteten Antworten korrekt sind) –