2010-12-06 4 views
0

У меня есть shared_array: boost :: shared_array myarr (новый char [m_length]);reallocating boost :: shared_array

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

//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); 
} 

ответ

2

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

(На самом деле, в зависимости от того, почему вы использовали shared_array в первую очередь, вы могли бы хорошо уйти только с помощью зЬй :: вектор, и передавать его в качестве ссылки тщательно.)

1

подталкивание :: shared_array :: Сброс должен сделать трюк

myarr.reset(new char[new_length]); 

подталкивание :: shared_array :: Сброс удаляет старый выделенный массив, поменяв его с недавно выделенной один.

Edit: Игнорировать этот ответ, это не решает его проблемы

+1

ли держать его контрольный счетчик старого? Скопирует ли значение массива в новый? Мне нужно то же самое значение, но в массиве большего размера. – Tal 2010-12-06 18:48:56

+1

Ничего, я неправильно понял вопрос. Игнорировать – tyree731 2010-12-06 19:45:16