java Do SWIG在carrays中的数组类。我可以释放它们包装的调用数组吗?
如果我有一个SWIG-wrapped C函数
unsigned char* f()
{
unsigned char* ptr;
bar(ptr); //set ptr
return ptr;
}
我使用SWIG的array_class
或array_functions
,它们的delete
函数会清理C分配的内存吗
也就是说,如果我使用array_class
来定义%array_class(int, IntArray)
并在Java中执行
IntArray ia = IntArray.frompointer(f());
当ia
超出范围时,或者如果使用array_functions
,当我显式调用delete()
时,f()返回的指针会被释放吗
array_class
的源代码显示包装的数组类有一个析构函数:
~NAME() {
delete [] self;
}
而且{
static void delete_##NAME(TYPE *ary) { %}
%{ delete [] ary; %}
这让我相信它确实如此,但文档并没有这样说,我看到的许多示例都使用JNI代码创建了一个由C函数传递的数组副本,删除了原始数组,并将副本返回给Java。所以我不确定,随着包装的进行,这些delete
函数到底删除了什么
# 1 楼答案
我发现SWIG生成的数组类的swigrough状态(决定它是否拥有本机内存)被设置为false。如果您将其更改为true,则执行myArray。delete()确实会释放它获取的本机内存,例如