将unique_ptr的数据释放并投射到另一个数据,而不进行复制

时间:2019-04-23 20:11:23

标签: c++ unique-ptr

我在函数中有一个float数组的unique_ptr,我想将其更改为uint8_t数组的unique_ptr。换句话说,unique_ptr<float[]>-> unique_ptr<uint8_t[]>

这是我尝试过的

void my_function(std::unique_ptr<float*> data) {
    std::unique_ptr<uint8_t*> converted_data(reinterpret_cast<uint8_t*>(data.release()));

    // ...
    // Processing converted_data ...
}

由于出现此错误: no matching constructor for initialization of 'std::unique_ptr<uint8_t *>' ,我想知道是否可以在不复制数据的情况下实现这一目标。

1 个答案:

答案 0 :(得分:1)

您正在强制转换为不兼容的类型。

data.release()的类型为float **,因为它返回指向unique_ptr中的内容的原始指针(在这种情况下为float *)。您应该改用uint_8t **(尽管看起来还是个坏主意)。