Проблемы с обёртыванием динамического массива shared_ptr <T []>

Я хотел заменить некоторые сырые указатели в моем классеstd::shared_ptr так что я нене нужно беспокоиться, когда я создаю копии этого класса. Но необработанные указатели указывают на динамический массив. Использование shared_ptr с динамическими массивами возможно, когда вы предоставляете ему пользовательское удаление, e.г. ,default_delete

Но я получаю большой список ошибок, как только я пытаюсь присвоить этому полю новое значение, даже в процессе строительства.

Вот'минимальный пример кода:

#include 
#include 

using namespace std;

template shared_ptr make_shared_array(size_t size)
{
  return shared_ptr(new T[size], default_delete());
}

struct Foo
{
  shared_ptr field;
};

int main()
{
  Foo a;
  // This line produces the error.
  a.field = make_shared_array(256);

  return 0;
}

NB: Да, я знаю, что мог / долженvector вместо динамических массивов. Но их производительность не одинакова. Я делаю тяжелую обработку изображений, и массивы содержат пиксели. При разрешении менее VGA время обработки увеличилось с 8 до 11s. Тот'довольно много.

Обновить: Конечно, я могу сообщить об ошибках здесь. Я просто нене знаю, стоит ли мне загромождать описание проблемы этим. Но вот оно:

C: \ Program Files (x86) \ Microsoft Visual Studio 11.0 \ VC \ INCLUDE \ memory (754): ошибка C2664: 'станд :: _ Ptr_base <_Ty>:: _ Reset0' : невозможно преобразовать параметр 1 из 'char ' ксимвол () []»

с[



_Ty = char []]



Типы, на которые указывают, не связаны; преобразование требует reinterpret_cast, приведение в стиле C или приведение в стиле функции

C: \ Program Files (x86) \ Microsoft Visual Studio 11.0 \ VC \ INCLUDE \ memory (723): см. Ссылку на создание экземпляра шаблона функции 'void std :: shared_ptr <_Ty>:: _ Resetp0 <_Ux>(_Ux *, std :: _ Ref_count_base *) ' компилируется

с[



_Ty = char [],

_Ux = символ]



C: \ Program Files (x86) \ Microsoft Visual Studio 11.0 \ VC \ INCLUDE \ memory (723): см. Ссылку на создание экземпляра шаблона функции 'void std :: shared_ptr <_Ty>:: _ Resetp0 <_Ux>(_Ux *, std :: _ Ref_count_base *) ' компилируется

с[



_Ty = char [],

_Ux = символ]



C: \ Program Files (x86) \ Microsoft Visual Studio 11.0 \ VC \ INCLUDE \ memory (494): см. Ссылку на создание экземпляра шаблона функции 'void std :: shared_ptr <_Ty>:: _ Resetp <_Ux, _Dx>(_Ux *, _ Dx) ' компилируется

с[



_Ty = char [],

_Ux = символ,

_Dx = станд :: default_delete]



C: \ Program Files (x86) \ Microsoft Visual Studio 11.0 \ VC \ INCLUDE \ memory (494): см. Ссылку на создание экземпляра шаблона функции 'void std :: shared_ptr <_Ty>:: _ Resetp <_Ux, _Dx>(_Ux *, _ Dx) ' компилируется

с[



_Ty = char [],

_Ux = символ,

_Dx = станд :: default_delete]



problem.cpp (9): см. ссылку на создание шаблона функции 'станд :: shared_ptr <_Ty>:: shared_ptr>(_Ux *, _ Dx) ' компилируется

с[



_Ty = char [],

Т = символ,

_Ux = символ,

_Dx = станд :: default_delete]



problem.cpp (9): см. ссылку на создание шаблона функции 'станд :: shared_ptr <_Ty>:: shared_ptr>(_Ux *, _ Dx) ' компилируется

с[



_Ty = char [],

Т = символ,

_Ux = символ,

_Dx = станд :: default_delete]



problem.cpp (21): см. ссылку на создание шаблона функции 'станд :: shared_ptr <_Ty> make_shared_array (size_t)» компилируется

с[



_Ty = char []]

Ответы на вопрос(4)

Ваш ответ на вопрос