От cppreference:
В С++ 11 и С++ 14 можно построить a
std::shared_ptr<T>
из astd::unique_ptr<T[]>
:std::unique_ptr<int[]> arr(new int[1]); std::shared_ptr<int> ptr(std::move(arr));
Так как
shared_ptr
получает свой дебит (astd::default_delete<T[]>
) изunique_ptr
, массив будет быть правильно освобожден.Это больше не разрешено в С++ 17. Вместо формы массива
std::shared_ptr<T[]>
.
Почему это не разрешено в С++ 17? Что изменилось?