Кажется, что очевидное использование std::shared_ptr<T[]>
(добавлено в C ++ 17) - удерживать указатель на T
и использовать delete[]
, когда пришло время уничтожать управляемый объект. Но этот код:
#include <memory>
int main() {
std::shared_ptr<int[]> sp(new int[3]);
return 0;
}
не компилируется ни с одним из онлайн-компиляторов, которые я пробовал. Во всех случаях сообщение об ошибке является вариантом этого:
/ Library / Developer / CommandLineTools / usr / bin /../ include / c ++ / v1 / memory: 3759: 18: note: шаблон кандидата игнорируется: требование 'is_convertible :: value 'не был удовлетворен [с _Yp = int] явным shared_ptr (_Yp * __p,
, то есть конструктор, который берет указатель, получает SFINAED, поскольку указатель на тип элемента isn' • преобразуется в указатель на массив. Это, по-видимому, требуется в стандарте C ++ 17 и в C ++ 20.
Это действительно то, что предназначено? Как я могу использовать этот конструктор? Или, как альтернатива, как создать std::shared_ptr
объект, который правильно управляет массивом без явного указания удалителя?