Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > shared_ptr<int[]> непонятная ошибка компиляции


Автор: wowka19 29.4.2016, 06:48
Есть std::shared_ptr<int[]> p.
Хочу присвоить ему массив int, но в обоих случаях:
Код

std::shared_ptr<int[]> p;
p.reset(new int[8]);

Код

std::shared_ptr<int[]> p;
p = std::shared_ptr<int[]>(new int[8]);

возникает ошибка компиляции где-то в недрах STL:
Код

C:\Qt\Tools\mingw492_32\i686-w64-mingw32\include\c++\bits\shared_ptr_base.h:871: ошибка: cannot convert 'int*' to 'int (*)[]' in initialization
         : _M_ptr(__p), _M_refcount(__p)
                                       ^

Что не так?

Автор: baldman88 29.4.2016, 08:57
Если память не изменяет, то shared_ptr при уничтожении вызывает delete (но не delete[], который нужен в Вашем случае). Чтобы работать с массивами нужно передавать свою версию delete (вторым параметром), которая будет корректно освобождать память. Ну и тип при инстанцировании нужно передавать без квадратных скобок. Такое, как Вы написали, нормально сработает с unique_ptr.
Вот хороший пример http://stackoverflow.com/questions/13061979/shared-ptr-to-an-array-should-it-be-used

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)