C++ 将数组的原始指针强制转换为唯一的\u ptr

C++ 将数组的原始指针强制转换为唯一的\u ptr,c++,arrays,pointers,c++14,unique-ptr,C++,Arrays,Pointers,C++14,Unique Ptr,我使用的是黑盒框架(cdg),它用值填充uint32\t数组。 这个电话看起来是这样的: std::size_t dataCount = 100; uint32_t* data = new uint32_t[dataCount]; cdg.generate(data); const std::size_t dataCount = 100; std::unique_ptr<uint32_t[]> data = std::make_unique<uint_32_t[]>(d

我使用的是黑盒框架(cdg),它用值填充
uint32\t
数组。 这个电话看起来是这样的:

std::size_t dataCount = 100;
uint32_t* data = new uint32_t[dataCount];
cdg.generate(data);
const std::size_t dataCount = 100;
std::unique_ptr<uint32_t[]> data = std::make_unique<uint_32_t[]>(dataCount);
cdg.generate(data.get());
不幸的是,该框架不使用模板,因此我必须传入一个
uint32\u t*
。为了去掉原始指针,我想把它“包装”成一个
std::unique\u ptr
。因此,这是一个数组,我想我必须使用
std::unique\u ptr
。有没有办法将原始指针转换为
唯一的\u ptr
或者我应该这样做:

std::size_t dataCount = 100;
uint32_t* data = new uint32_t[dataCount];
cdg.generate(data);
const std::size_t dataCount = 100;
std::unique_ptr<uint32_t[]> data = std::make_unique<uint_32_t[]>(dataCount);
cdg.generate(data.get());
const std::size\t dataCount=100;
std::unique_ptr data=std::make_unique(数据计数);
generate(data.get());

智能指针是伟大的,所有的,但也许可以考虑使用<代码> STD::vector < /代码>,因为您注意到它是一个数组。

您可以使用获取指向数据的指针,因为它是一个C数组(用于旧接口)

标准:向量nums(100);//创建大小为100的向量 uint32_t*ptr=nums.data(); cdg.generate(ptr);//根据需要通过uint32_t*

如果您需要确保唯一的所有权,
unique_ptr
是正确的选择。但听起来好像你真的只是想要一些可以清理数组的东西,但仍然为C方法提供了一个原始指针。

使用
std::vector
,和
std::vector::data()
?为什么不使用uint32\u t的向量?如果
dataCount
是常量,使用
std::array
你已经尝试过什么了吗?@gurka数组选项是有效的,但只要对需求中的常量有疑问,我就会反对它。数组应该由大量的“工人”处理。要做到这一点,我希望“拆分”数组并像这样将其传递给工人:std::size\u t workerCount=10;std::size\u t workCount=数据计数/工作计数;对于(std::size_t i=0;idata()+offset是有效的,只要offset小于
size()
,在
std::vector
的数据中并发工作就没有问题,只要您不(重新)移动或附加条目。是的,当对象超出范围时,将在经典RAII方式中调用vector析构函数。也许可以添加,在C++ 11之前,可以使用<代码>和NUS[0 ] < /C>代替C++版本。