我需要得到一个T的动态数组,它看到我需要接口的C代码是T *。使用std :: vector <T>或make_unique <T[]>将指针传递给C代码
我应该使用一个std :: vector,然后保留足够的计数并传递:: data()指针,或者我应该使用std :: make_unique并传递它。
我在C++ 14上。
我需要得到一个T的动态数组,它看到我需要接口的C代码是T *。使用std :: vector <T>或make_unique <T[]>将指针传递给C代码
我应该使用一个std :: vector,然后保留足够的计数并传递:: data()指针,或者我应该使用std :: make_unique并传递它。
我在C++ 14上。
两者都可以工作,并且在大多数情况下这是个人喜好的问题。 它主要依赖于在C API调用之前和之后使用数组或向量。
如果你已经有了一个vector
,或将需要在vector
之后的数据,只需使用resize
(不reserve
),并用它去。无需创建新阵列并将数据复制到其中。
但是,如果你只需要本地和你的算法中的数据,不需要改变它的长度,我会说去与unique<T[]>
,因为它会更清楚地表达你的固定大小数组的意图。
无论用于容纳数据的容器如何, vector或T [],使用std :: unique_ptr的问题是一个不相关的所有权问题。后一个问题是更重要的问题,因为它是正确而不是表现。
如果您打算将指针的唯一所有权转移给接收函数,那么std :: unique_ptr是一个很好的方法。如果你不打算在调用之后放弃指针的所有权,那么你不能使用std :: unique_ptr。
香草萨特有一个良好的开端
https://herbsutter.com/2013/05/29/gotw-89-solution-smart-pointers/
无论是。矢量函数是'resize',而不是'reserve' –