2017-02-16 51 views
2

我正在使用黑盒框架(cdg),它使用值填充uint32_t的數組。 調用看起來像這樣:將原始數組投影到unique_ptr

std::size_t dataCount = 100; 
uint32_t* data = new uint32_t[dataCount]; 
cdg.generate(data); 

不幸的是,框架不使用模板,所以我有一個uint32_t*通過。爲了擺脫原始指針,我想將它「包裝」成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()); 
+2

使用'std :: vector'和'std :: vector :: data()'? – BoBTFish

+1

爲什麼不使用uint32_t的向量? – finlaybob

+3

如果'dataCount'不變,則使用'std :: array' – gurka

回答

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方法的原始指針。

+0

該數組應該由一定數量的「工作人員」處理。爲此,我想「拆分」數組並將其傳遞給像這樣的工作人員: std :: size_t workerCount = 10; std :: size_t workCount = dataCount/workerCount; (std :: size_t i = 0; i Hymir

+0

是的,正如[data()](http://en.cppreference.com/w/cpp/container/vector/data)docs中所述,只要表達式data()+ offset是有效的偏移量小於size()' –

+0

只要您不(重新)移動或追加條目到'std :: vector'的數據中,併發工作就沒有問題。 – Wolf