Der negative Effekt des "Re-Newing" ist, dass Sie den Zeiger auf den ursprünglich zugewiesenen freien Speicher verlieren. Es bleibt während des gesamten Rests Ihres Programms besetzt, ohne dass Sie es zurückerobern könnten.
Natürlich können Sie einen anderen Zeiger auf den Speicher zeigen, aber das wäre ein sehr seltsames und unnötig komplexes Stück Code.
Vermeiden Sie all diese Probleme, indem Sie std::vector
anstelle von new[]
verwenden.
tc1 = new TCHAR[size1];
tc1[size1] = { L'\0' };
Neben dem Speicherleck, das ist nicht definiertes Verhalten, weil size1
einer nach dem letzten gültigen Index ist.
Hier ist ein std::vector
Beispiel:
std::vector<TCHAR> tc1(1);
// later:
//resize TCHARs
tc1.resize(size1);
tc1[size1 - 1] = L'\0';
Vielleicht sogar std::string
oder std::wstring
für Ihre Bedürfnisse ausreicht.
Ein solcher Code _resize_ das Array nicht, verwirft den vorherigen Zeiger auf ein Array (verursacht einen Speicherverlust) und überschreibt 'tc1' mit einem Zeiger auf ein neues Array. –
Wenn Sie den zugewiesenen Speicher freigeben, sollte dies keine negativen Auswirkungen haben. – Asesh
Außerdem, wenn Sie explizit '' L ''Präfix für breite Zeichen verwenden, dann sehe ich keinen Grund, TCHAR zu verwenden, stattdessen wchar_t verwenden oder _T oder TEXT Makro verwenden. Denken Sie daran, dass die Verwendung von TCHAR Ihren Code nicht portierbar macht. – Asesh