Вопрос

У меня есть Shared_array: Boost :: Shared_Array Myarr (New Char [M_Length]);

Я хотел бы перераспределить массив. Я подумал о создании нового Shared_Array с нужным размером и используя метод Boost Swap, но это также будет скопировать счетчик ссылок. У вас есть еще одна идея?

//new_length>m_length
void func(boost::shared_array<char> &myarr,int new_length)
{
       boost::shared_array<char> new_arr(new char[new_length]);
       myarr.swap(new_arr);
}
Это было полезно?

Решение

Почему бы не просто вместо этого использовать boost::shared_ptr<std::vector<char> >? Пусть стандартная библиотека рецензирует изменение размера.

(На самом деле, в зависимости от того, почему вы использовали Shared_Array в первую очередь, вы вполне можете сойти с помощью просто используя STD :: Vector, и проезжая его по ссылке.)

Другие советы

Boost :: Shared_Array :: Сброс должен сделать трюк

myarr.reset(new char[new_length]);

Boost :: Shared_Array :: RESET Удаляет старый выделенный массив, поднимая его в недавно выделенный.

Редактировать: игнорировать этот ответ, это не решает его проблему

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top