我正在应用嵌套类的 SWIG 手册部分中的解决方法,它使用全局内部类。在这里,我将向您展示类似于手册中的版本,但尽可能为您简化。我还必须添加内联定义{}
,method()
因为没有 SWIG 将根本无法工作。
// File outer.h
class Outer {
public:
class Inner {};
void method() {}
};
// File : example.i
// Redefine nested class in global scope in order for SWIG to generate
// a proxy class. Only SWIG parses this definition.
class Inner {};
%{
#include "outer.h"
%}
%include "outer.h"
%{
// SWIG thinks that Inner is a global class, so we need to trick the C++
// compiler into understanding this so called global type.
typedef Outer::Inner Inner;
%}
这很好用。但是,假设我更改method()
为创建并返回嵌套Inner()
:
Inner method() { return Inner(); }
现在,结果如我所料(在实际更复杂的示例中),所以这不是我的问题。我的问题是,这警告泄漏:重复应用
>>>Outer().method()
结果是
swig/python detected a memory leak of type 'Outer::Inner *', no destructor found.
我知道如何解决这种问题 - 向 SWIG 提供违规类的完整定义。Inner
但是,已经提供了全局范围类的完整定义。事实上,嵌套类的定义也提供了,但我猜 SWIG 忽略了它并且警告继续。
所以嵌套类按预期为我工作,除了我收到内存泄漏警告。
怎么避免??