我有一些C ++代码,我想从Python调用它。 C ++代码将字典列表返回给python代码。我通过以下方式使用boost.python实现此目的:
struct MyStruct {
int foo;
};
class MyClass
{
public:
std::vector<MyStruct> get_stuff();
};
struct MyStructConverter
{
static PyObject* convert(const std::vector<MyStruct>& v)
{
boost::python::list ret;
for (auto c : v) {
boost::python::dict *r = new boost::python::dict();
(*r)["foo"] = c.foo;
ret.append(boost::python::object(*r));
}
return boost::python::incref(ret.ptr());
}
};
/** Interface between C++ and Python
*/
BOOST_PYTHON_MODULE(glue)
{
boost::python::to_python_converter<std::vector<MyStruct>, MyStructConverter>();
class_<MyClass, boost::noncopyable>("MyClass")
.def("get_stuff", &MyClass::get_stuff);
}
在我可以将数据从C ++传递到python的范围内,它起作用。但是,当按如下方式使用时:
# test.py
x = MyClass()
while True:
u = x.get_stuff()
# do something with u
它会泄漏内存(即python进程的VSZ一直在增长,直到整个系统停止运行)。
我在做什么错?如何避免这种情况?