检测到Swig/Python内存泄漏
我有一个非常复杂的类,我正在尝试用SWIG为它创建Python的包装器。不过,当我在Python中创建这个类的实例时,我发现无法初始化某些数据成员,并且收到了这样的提示信息:
>>> myVar = myModule.myDataType()
swig/python detected a memory leak of type 'MyDataType *', no destructor found.
有没有人知道我该怎么解决这个问题?我是否需要使用某个标志来生成析构函数?
2 个回答
-13
这个错误信息对我来说很清楚,你需要为这个类型定义一个析构函数。
12
SWIG总是会生成析构函数的包装代码(除非你使用了%nodefaultdtor
这个指令)。不过,如果它对某个类型一无所知,就会生成一个不透明的指针包装,这样可能会导致内存泄漏(还有上面提到的警告信息)。
请确认myDataType
是SWIG所知道的类型。可以重新运行SWIG,并打开调试信息,查看是否有类似下面的信息:
Nothing is known about Foo base type - Bar. Ignored
收到这样的信息意味着SWIG对你的类型层次结构了解得不够全面,因此只能根据有限的信息进行操作,这可能导致它不生成析构函数。