这是关于使用swig的嵌入式python。
我有一个std::map<enum, std::string>
暴露给python(嵌入式python)。执行脚本时,swig会在末尾吐出下面的“警告”(当地图超出范围时 - 我猜):
swig / python检测到类型'std :: map&lt;的内存泄漏MyEnum,std :: string&gt;
......没有找到析构函数
.i文件是:
enum MyEnum {
...
};
typedef std::map<MyEnum, std::string> MyTypedef;
%template(MyTypedef) std::map<MyEnum, std::string>;
如果我在整个代码中用int替换MyEnum
,那就没事了。当枚举不是PyObjects时,不知道为什么swig需要任何特殊的破坏!我错过了什么吗?是否有一些%magic_operator
会有所帮助
注意:我不想一起抑制“内存泄漏”警告。
仔细观察swig生成的包装但是徒劳无功。
答案 0 :(得分:0)
声明顺序可能有问题:必须在将MyEnum添加到SWIG界面后声明std :: map%模板。
我过去没有这样做(虽然在我的情况下,map键是unsigned int的typedef别名),并且看到了这里报告的完全相同的症状集。