Стандарт предоставляет специализированную специализацию std::unique_ptr, которая корректно вызывает delete[] из своего деструктора:
void func()
{
std::unique_ptr< int[] > arr(new int[10]);
.......
}
С std::shared_ptr эта специализация недоступна, поэтому необходимо
для обеспечения дебетера, который правильно называет delete[]:
void func()
{
// Usage
shared_ptr array (new double [256], [](double* arr) { delete [] arr; } );
..............
}
Это просто недосмотр? (таким же образом, что существует std::copy_if) или есть причина?