uint8_t* pcmData = new uint8_t[320]{ 0 }; std::shared_ptr<uint8_t> voiceData; 如何使用std::make_shared<uint8_t>将 pcmData 赋值给 voiceData?
时间: 2024-12-08 13:16:50 浏览: 12
C++11 std::shared_ptr总结与使用示例代码详解
要将`pcmData`转换为`std::shared_ptr<uint8_t>`并赋值给`voiceData`,可以使用`std::make_shared`函数。`std::make_shared`会自动管理内存,确保`pcmData`数组在不再被`voiceData`引用时被释放。以下是操作步骤:
```cpp
// 创建pcmData数组
uint8_t* pcmData = new uint8_t[320]{ 0 };
// 使用std::make_shared创建一个指向pcmData的新shared_ptr
std::shared_ptr<uint8_t> voiceData(std::make_shared<uint8_t[]>(320), pcmData); // 第二个参数是要管理的原始数据
// 注意:这里不需要显式地删除pcmData,因为make_shared已经负责了清理工作
```
上述代码中,`std::make_shared<uint8_t[]>(320)`创建了一个新的动态分配的`uint8_t`数组,其大小为320,然后传递给第二个参数,表示该数组应由`voiceData`共享所有权。`pcmData`被设置为额外的参数,这样当`voiceData`销毁时,`pcmData`也会被自动释放。
阅读全文