Lo standard fornisce un modello di specializzazione di std::unique_ptr
che chiama correttamente il delete[]
dal suo distruttore:Perché non esiste una specializzazione std :: shared_ptr <T[]>?
void func()
{
std::unique_ptr<int[]> arr(new int[10]);
.......
}
Con std::shared_ptr
questa specializzazione non è disponibile, quindi è necessario fornire una delezione che chiama correttamente delete[]
:
void func()
{
// Usage
shared_ptr array (new double [256], [](double* arr) { delete [] arr; });
..............
}
Si tratta semplicemente di una svista? (nello stesso modo in cui esiste un std::copy_if
) o c'è un motivo?
N.B. c'è una nuova proposta per aggiungere questo per C++ 17, basato sul lavoro in Boost, vedi http://open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3640.html –
Notate che molto del meccanismo 'shared_ptr' dovrebbe essere disabilitato quando si lavora con gli array, come ad esempio la possibilità di fare riferimento a un suboggetti. –