有没有更好的方法来分配/复制shared_array

时间:2013-04-02 23:38:18

标签: c++ boost shared-ptr

我有一个提供GetBuffer()GetBufferSize()方法的流对象。 GetBuffer方法返回原始uint8_t指针。我想(通过值)将此缓冲区传递给另一个期望shared_array<uint8_t>的对象。我正在使用boost,(我相当新手),这就是我想出来的。

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

感觉应该有类似于boost的make_shared,可以清理它。我错过了一些明显的东西吗?

1 个答案:

答案 0 :(得分:0)

Boost 1.53 we've got make_shared for arrays。所以你的代码看起来像这样:

shared_ptr<uint8_t[]> data = make_shared<uint8_t[]>(a.GetBufferSize());

当然,您需要更改BClass::SetData签名,接受shared_ptr而不是shared_array