Ich verstehe nicht, was folgende Anweisung tun würde (besonders zweite Zeile)?Neu zuordnen des Objekts unique_ptr mit make_unique-Anweisungen - Speicherleck?
auto buff = std::make_unique<int[]>(128);
buff = std::make_unique<int[]>(512);
Wird der zweite Aufruf von make_unique
durch Zuweisungsoperator gefolgt wird de-allocate Speicher von ersten Anruf zugeordnet ist, oder wird es Speicherleck sein? Muss ich buff.reset(new int[512]);
verwenden?
Ich habe es debuggt, aber keine operator=
aufgerufen, noch ein Destruktor aufgerufen (von unique_ptr
).
Ich wette der Compiler einfach den ersten Aufruf. – kennytm
'operator =' sollte aufgerufen werden und das zuvor verwaltete Objekt wird gelöscht. Kein Speicherleck hier. – songyuanyao
Die Deklaration weist ein Array von Integer der Größe 512 zu. Der hier aufgerufene Destruktor wird "Delete Buff" verwenden, um Speicher freizugeben, aber Sie haben Speicher für ein Array von Integer zugewiesen, idealerweise sollte "delete [] buff" aufgerufen werden. Für diese Anforderung können Sie einen benutzerdefinierten Deallocator mit Ihrer Smart-Pointer-Deklaration übergeben. – sagar