Non capisco cosa farebbe la seguente dichiarazione (specialmente la seconda riga)?Riassegna oggetto unique_ptr con istruzioni make_unique - Perdita di memoria?
auto buff = std::make_unique<int[]>(128);
buff = std::make_unique<int[]>(512);
disposta la seconda chiamata a make_unique
seguita da operatore di assegnazione saranno deallocare memoria allocata da prima chiamata, o ci saranno perdita di memoria? Devo usare buff.reset(new int[512]);
?
Ho eseguito il debug, ma non ho trovato alcun operator=
chiamato, né alcun distruttore essere invocato (da unique_ptr
).
Scommetto che il compilatore ha semplicemente eliminato la prima chiamata. – kennytm
'operator =' deve essere chiamato e l'oggetto precedentemente gestito verrà cancellato. Nessuna perdita di memoria qui. – songyuanyao
La dichiarazione assegna un array di numero intero di dimensione 512. Vedere il distruttore chiamato qui userà "delete buff" per deallocare la memoria, ma è stata allocata memoria per un array di numero intero in modo ideale dovrebbe essere chiamato "delete [] buff". Per tale requisito è possibile passare un deallocatore personalizzato con la dichiarazione del puntatore intelligente. – sagar