До C++17
, std::shared_ptr
мог не обрабатывать динамически распределяемые массивы.Обновите ваш компилятор для поддержки C++17
, и ваш код с радостью скомпилируется.
РЕДАКТИРОВАТЬ: это обходной путь для более ранних версий.Вы можете использовать:
std::shared_ptr<int> sp(new int[10], custom_deleter<int>{});
, где custom_deleter
будет функцией, которая будет использоваться для освобождения выделенной памяти.В этом случае будет достаточно простого delete[]
(вместо неявного delete
внутри деструктора shared_ptr
):
template< typename T >
struct custom_deleter
{
void operator ()(const T* arr)
{
delete[] arr;
}
};
, но так как вы уже используете C++11
, можно заменить структурус лямбда-выражением , которое упростит код:
std::shared_ptr<int> sp(new int[10], [](const int* arr){ delete[] arr; });