Mi chiedevo perché gli array dinamici sono direttamente supportati da std::unique_ptr<>
ma non da std::shared_ptr<>
:Perché non esiste una specializzazione per std :: shared_ptr <T[]>?
unique_ptr<int[]> ptr1(new int[n]); /// OK!
shared_ptr<int[]> ptr2(new int[n]); /// Incorrect: will not call delete[]
Update: ho scoperto che la seconda linea può essere riscritto come:
shared_ptr<int> ptr2(new int[n], default_delete<int[]>());
Ora mi chiedo cosa sta succedendo dietro la scena che rende std::shared_ptr
funziona con il secondo approccio e non nel modo simile a std::unique_ptr
?
Che messaggio di errore ricevi? –
Non si tratta di un messaggio di errore, si tratta della correttezza della seconda riga poiché non richiama la cancellazione [] – Vahid
Non devi specificare un deleter con 'unique_ptr' (cioè il 'deleter' il parametro template non ha valore predefinito)? Questo almeno è ciò che è suggerito [qui] (http://en.cppreference.com/w/cpp/memory/unique_ptr) se non sbaglio. –
Walter