我有一个非常复杂的类,我正试图在SWIG中创建Python包装器。但是,当我在Python中创建该项的实例时,我无法初始化某些数据成员,否则就会收到以下消息:
>>> myVar = myModule.myDataType()
swig/python detected a memory leak of type 'MyDataType *', no destructor found.
有人知道我需要做什么来解决这个问题吗?是否有标志可以使用来生成析构函数?
我有一个非常复杂的类,我正试图在SWIG中创建Python包装器。但是,当我在Python中创建该项的实例时,我无法初始化某些数据成员,否则就会收到以下消息:
>>> myVar = myModule.myDataType()
swig/python detected a memory leak of type 'MyDataType *', no destructor found.
有人知道我需要做什么来解决这个问题吗?是否有标志可以使用来生成析构函数?
SWIG总是生成析构函数包装器(除非使用%nodefaultdtor
指令)。但是,在它不知道类型的情况下,它会生成一个不透明指针包装器,这将导致内存泄漏(和上面的消息一样)。
请确认myDataType
是SWIG已知的类型。重新运行打开调试消息的SWIG,并检查是否有类似以下消息:
Nothing is known about Foo base type - Bar. Ignored
收到如上所述的消息意味着 SWIG 不完全了解您的类型层次结构,因此只能使用有限的信息进行操作 - 这可能导致它未生成 dtor。
对我来说,错误信息非常清晰,你需要为该类型定义一个析构函数。