随着时间的推移,我收到一条较大邮件的部分(RdKafka::Message
)并将其存储在
std::vector<std::unique_ptr<RdKafka::Message>> messageParts;
RdKafka::Message
有一个原始指针有效负载,我希望将其移动到单个shared_ptr
中。我可以这样做,因为我有RdKafka::Message
中包含的原始较大消息的大小和索引。
收到较大邮件的所有部分后,我想将所有邮件重组为一个shared_ptr
。
我的第一个策略是在C样式指针中分配内存空间总量,然后将std::move
每个单独的unique_ptr
部分数据分配到C样式内存的正确部分。像这样:
uint8_t* payload = new uint8_t[totalBytes];
for(auto& m : messageParts){
int32_t partition = m->partition();
size_t len = m->len();
std::memcpy(&payload[partition], (uint8_t*)(m->payload()), len);
}
std::shared_ptr<uint8_t[]>(payload);
这显然没有编译,但我正在寻找这样的东西,以便我可以返回一个指向所有原始内存的指针。