У меня есть объект потока, который предоставляет методы GetBuffer()
и GetBufferSize()
. Метод GetBuffer
возвращает необработанный указатель uint8_t
. Я хочу передать (по значению) этот буфер другому объекту, который ожидает shared_array<uint8_t>
. Я использую boost (что я довольно новичок), и это то, что я придумал.Есть ли лучший способ выделения/копирования shared_array
// relevant protos for a and b
void BClass::SetData(shared_array<uint8_t> data, size_t data_len);
uint8_t* AClass::GetBuffer(void);
size_t AClass::GetBufferSize(void);
AClass a;
BClass b;
shared_array<uint8_t> data = shared_array<uint8_t>(new uint8_t[a.GetBufferSize()]);
memcpy(data.get(), a.GetBuffer(), a.GetBufferSize());
b.SetData(data, a.GetBufferSize());
Похоже, что должно быть что-то похожее на make_shared boost, которое могло бы очистить это. Мне что-то не хватает?
Это удаляет вызов на новый, но «memcpy» по-прежнему необходимо выполнять отдельно. Кроме того, не массивы в shared_ptr new в 1.53? IIRC, мы используем Boost 1.33 – benf
@benf Да, это новая функция в boost1.53. Что касается 'memcpy', вы можете использовать' std :: copy', но в этом случае это не имеет значения. –