我正在使用blackbox框架(cdg),它使用值填充uint32_t
数组。
电话看起来像这样:
std::size_t dataCount = 100;
uint32_t* data = new uint32_t[dataCount];
cdg.generate(data);
不幸的是,框架没有使用模板,因此我必须传入uint32_t*
。要摆脱我想要的原始指针&#34; wrap&#34;它变成std::unique_ptr<uint32_t>
。因此,我认为我必须使用一个阵列
std::unique_ptr<uint32_t[]>
。有没有办法将原始指针转换为unique_ptr
或者我应该这样做:
const std::size_t dataCount = 100;
std::unique_ptr<uint32_t[]> data = std::make_unique<uint_32_t[]>(dataCount);
cdg.generate(data.get());
答案 0 :(得分:6)
智能指针很棒,但可能考虑使用std::vector
,因为你注意到它是一个数组。
您可以使用data()
获取指向数据的指针,因为它是C阵列(对于旧版界面)。
std::vector<uint32_t> nums(100); // creates a vector of size 100
uint32_t *ptr = nums.data();
cdg.generate(ptr); // passes uint32_t* as needed
如果您需要确保唯一所有权,unique_ptr
是正确的选择。但听起来你真的只是想要清理数组的东西,但仍为C方法提供原始指针。