检测到内存泄漏... 找不到枚举的析构函数
这段内容是关于使用swig嵌入Python的。
我有一个std::map<enum, std::string>
被暴露给Python(嵌入式Python)。当脚本执行时,swig在最后会输出下面的“警告”(我猜是当这个map超出作用域时):
swig/python 检测到类型为 'std::map< MyEnum, std::string>' 的内存泄漏
... 找不到析构函数
这个.i文件是:
enum MyEnum {
...
};
typedef std::map<MyEnum, std::string> MyTypedef;
%template(MyTypedef) std::map<MyEnum, std::string>;
如果我把代码中的MyEnum
全部换成int,情况就没问题了。我不知道为什么swig在处理枚举时需要特殊的销毁方式,而枚举又不是PyObjects!我是不是漏掉了什么?有没有什么%magic_operator
可以帮助我?
注意:我不想完全抑制“内存泄漏”的警告。
我仔细查看了swig生成的包装器,但没有找到解决办法。
1 个回答
0
可能是声明顺序的问题:std::map这个模板必须在MyEnum添加到SWIG接口之后才能声明。
我之前也遇到过这个问题(不过那时我的map键是一个无符号整数的别名),结果出现了和这里描述的一模一样的症状。