c++ - 在不复制的情况下将 unique_ptr 的数据释放并转换为另一个

标签 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 *>' ,我想知道是否可以在不复制数据的情况下实现这个目标。

最佳答案

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

data.release() 是 float** 类型,因为它返回一个指向 unique_ptr 中任何内容的原始指针(在本例中为 float*)。您应该改为转换为 uint_8t**(尽管这看起来仍然是个坏主意)。

关于c++ - 在不复制的情况下将 unique_ptr 的数据释放并转换为另一个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55818729/

相关文章:

c++ - 尝试引用已删除函数的唯一指针

c++ - 我的指针违反了访问限制错误,我想解释一下我应该在 Book 非默认构造函数中做什么

c++ - 为什么在已删除指针上调用非虚拟成员函数是未定义的行为?

c++ - C代码如何在没有前导下划线的情况下调用外部函数?

c++ - 共享指针的双重检查锁定

c++ - Unique_ptr 容器或 unique_ptr 元素

c++ - Linux 多线程应用程序中的中断生成 SIGSEGV

c++ - 如何通过 std::unique_ptr 成员调用其他类的 const 成员函数

c++ - std::make_unique 可以与抽象接口(interface)一起使用吗?

c++ - unique_ptr 实现中可能存在的错误