我正在使用 SWIG 将 C++ 库包装到 Java 和 Python 中。Java 端工作正常,但我在将代码包装到 Python 中时遇到问题,特别是当引发 IO 异常时,我在 python 中得到以下信息:
...
RuntimeError: _408aad4bde7f0000_p_std__ios_base__failure
swig/python detected a memory leak of type 'std::ios_base::failure *', no destructor found.
这是我的 .i 文件中的相关位置:
%include "exception.i"
#include <stdexcept>
#include <ios>
#include <iostream>
%exception {
try {
$action
} catch (const std::exception &e) {
PyErr_SetString(PyExc_Exception, const_cast<char*>(e.what()));
}
catch(std::ios_base::failure &e) {
PyErr_SetString(PyExc_IOError, const_cast<char*>(e.what()));
}
}
有任何想法吗?对于它的价值,io 异常在使用库的本机 C++ 和 SWIG 包装的 Java 中都按预期工作。