我在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);
我当前只使用new
和delete
,创建结构,填充它们并将其传递到方法。
我想在我的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均可让您阅读原始指针并将其作为零努力的参数传递。
鉴于您已经在使用新的和删除进行内存管理,其他声音的问题不是问题吗?