我需要获得一个T的动态数组,看看我需要与之接口的C代码是T *。
我应该使用std :: vector,然后保留足够的count并传递:: data()指针,或者我应该使用std :: make_unique并传递它。
我在C ++ 14上。
答案 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/