将数组的原始指针转换为unique_ptr

时间:2017-02-16 10:49:16

标签: c++ arrays pointers c++14 unique-ptr

我正在使用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());

1 个答案:

答案 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方法提供原始指针。