使用std :: vector <t>或make_unique <t []>将指针传递给C代码

时间:2016-10-01 06:12:57

标签: c++ c++14

我需要获得一个T的动态数组,看看我需要与之接口的C代码是T *。

我应该使用std :: vector,然后保留足够的count并传递:: data()指针,或者我应该使用std :: make_unique并传递它。

我在C ++ 14上。

2 个答案:

答案 0 :(得分:0)

两者都有效,在大多数情况下,这是个人偏好的问题。 但主要取决于在C API调用之前和之后使用数组或向量。

如果您已经有vector,或者之后需要vector中的数据,请使用resize reserve)和它一起去吧。无需创建新数组并将数据复制到其中。

但是如果你只需要在本地和算法中使用数据就不需要改变它的长度,我会说用unique<T[]>,因为它会更清楚地表达你对固定大小数组的意图。

答案 1 :(得分:0)

无论用于容纳数据的容器如何,例如vector或T [],使用std :: unique_ptr的问题是一个无关的所有权问题。后一个问题是更重要的问题,因为它是正确而不是表现。

如果您打算将指针的唯一所有权转移到接收函数,那么std :: unique_ptr是一种很好的方法。如果你打算在调用后不想放弃指针的所有权,那么就不能使用std :: unique_ptr。

Herb Sutter有个好地方开始

https://herbsutter.com/2013/05/29/gotw-89-solution-smart-pointers/