gpt4 book ai didi

c++ - 将 unique_ptr 传递给库函数(FORTRAN 函数)

转载 作者:太空狗 更新时间:2023-10-29 23:16:09 27 4
gpt4 key购买 nike

我正在使用 LAPACK 库创建一个使用 C++ 的 R 包。我正在使用 unique_ptr 将数组定义为

   unique_ptr<double[]> my_arr(new double[arr_length]);

然后我将这个 unique_ptr 传递给库函数(FORTRAN 函数),它接受指向双数组的指针,并将在函数内部更新这个数组作为

   F77_CALL(daxpy) (&num_feat_, &beta, tmp, &inc_one, my_arr.get(), &inc_one);

浏览网页后,我注意到不建议将 unique_ptr 作为指针参数传递给函数。但是,我正在使用的库函数在其参数中需要一个指针。我不能在将指针发送给函数之前释放指针,因为库函数需要更新指针。有什么有效的方法来处理这个问题吗?

最佳答案

假设库不会取得数组的所有权并尝试删除它本身,我认为这完全没问题。

您通常应该更喜欢通过引用或原始指针传递,并且通常只在转移所有权时传递 unique_ptr,所以我认为这是正确的。调用代码保留数组的唯一所有权。

您知道当 unique_ptr 超出范围时函数调用之后数组才会被删除,这正是您想要的。

我认为这是调用不会取得所有权的函数的正确方法,即使它们在您自己的代码中也是如此。

参见 GotW #91有关如何传递(智能)指针的摘要。

如果库在函数调用后保留指针,您必须确保 unique_ptr 在库完成使用它之前没有超出范围,这有点棘手。

有一些库假定您将在堆上分配对象并通过原始指针赋予它们所有权(我在一些可视化库中看到过)。他们在完成后删除对象。这在 C++11 中通常被认为是不好的做法,但如果您需要调用此类库,则不应使用 unique_ptr,因为您不想自己删除对象.

关于c++ - 将 unique_ptr 传递给库函数(FORTRAN 函数),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25853082/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com