【问题标题】:Detected a memory leak... no destructor found - for enums检测到内存泄漏...未找到析构函数 - 用于枚举
【发布时间】:2010-10-21 16:46:09
【问题描述】:

这是关于使用 swig 的嵌入式 python。

我有一个std::map<enum, std::string> 暴露于 python(嵌入式 python)。当脚本执行时,swig 在最后吐出下面的“警告”(当地图超出范围时 - 我猜):

swig/python 检测到 'std::map
类型的内存泄漏 ...没有找到析构函数

.i 文件是:

enum MyEnum {
 ...
};

typedef std::map<MyEnum, std::string>  MyTypedef;
%template(MyTypedef) std::map<MyEnum, std::string>;

如果我在整个代码中用 int 替换 MyEnum,一切都会好起来的。当枚举不是 PyObjects 时,不知道为什么 swig 需要任何特殊的破坏!我错过了什么吗?是否有一些%magic_operator 会有所帮助。
注意:我不想同时抑制“内存泄漏”警告。

仔细看了一下swig生成的wrapper,但是没有用。

【问题讨论】:

标签: python swig


【解决方案1】:

声明顺序可能有问题:std::map %template 必须在 MyEnum 添加到 SWIG 接口之后声明。

我过去没有这样做(尽管在我的情况下,映射键是无符号整数的 typedef 别名),并且看到了此处报告的完全相同的一组症状。

【讨论】:

  • 如上所示,在 MyEnum 之后提到了 std::map %template。所以,看起来还有更多的东西。请注意,这只发生在地图中的枚举上。一个整数到字符串的映射都很好。
猜你喜欢
  • 2012-07-16
  • 1970-01-01
  • 2021-03-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-22
  • 2022-06-11
相关资源
最近更新 更多