使用C库的C 程序 - 将智能指针转换为RAW C样式指针



我在C 程序中使用C库。

图书馆中的一个函数需要指向数组和标量作为参数,例如:

int PartGraphKway(idx t *nvtxs, idx t *ncon, idx t *xadj, idx t *adjncy,
    idx t *vwgt, idx t *vsize, idx t *adjwgt, idx t *nparts, real t *tpwgts,
    real t ubvec, idx t *options, idx t *objval, idx t *part);

我当前只使用newdelete,创建结构,填充它们并将其传递到方法。

我想在我的C 程序中使用智能点。我可以创建智能点并将其转换为原始指针,然后将它们传递给功能?

因此,我不需要致电delete

std::vector如果需要动态分配数组,则可能是一个不错的选择。您可以使用std::vector::data来获取内部缓冲区的原始指针。

示例:

std::vector<t> nvtxs(....);
PartGraphKway(nvtxs.data(), ....);
// no need to call delete; vector takes care of memory

这取决于谁发布了指针。如果C 代码发布它,则std::unique_ptr::get()将提供原始指针,并且当unique_ptr对象被销毁时,该对象仍将自动释放。

如果C代码获得指针的所有权,则最终将使用free()发布内存。您可以致电std::unique_ptr::release()以使智能销钉放弃其对象所有权。您还必须使用Malloc(而不是new)创建指针,并将自定义exter传递给std::unique_ptr,以调用free(ptr)。如果对象具有构造函数,则必须调用新位置,以便在malloc之后调用构造函数。

是的,您可以按照所需的方式使用智能指针。solution_ptr和shared_ptr均可让您阅读原始指针并将其作为零努力的参数传递。

鉴于您已经在使用新的和删除进行内存管理,其他声音的问题不是问题吗?

相关内容

  • 没有找到相关文章

最新更新