gpt4 book ai didi

c++ - 有没有更好的分配/复制 shared_array 的方法

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:57:41 26 4
gpt4 key购买 nike

我有一个提供 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 的东西可以清理它。我是否遗漏了一些明显的东西?

最佳答案

Boost 1.53we've got make_shared for arrays .所以您的代码可能如下所示:

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

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

关于c++ - 有没有更好的分配/复制 shared_array 的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15776364/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com