将数据从多个unique_ptr移动到连续的C样式数组中

时间:2017-10-09 04:05:13

标签: c++

随着时间的推移,我收到一条较大邮件的部分(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);

这显然没有编译,但我正在寻找这样的东西,以便我可以返回一个指向所有原始内存的指针。

0 个答案:

没有答案