我使用SWIG来连接C++和Python.我创建了一个函数,它创建了一个std :: vector对象指针.在这种情况下,指向的对象并不重要.
我遇到的问题是,当object(someObject)超出Python端的范围时,它无法释放向量中对象/指针所指向的内存,从而导致内存泄漏.
C++代码:
std::vector < someObject* > createSomeObjectForPython()
{
std::vector < someObject* > myVector;
someObject* instanceOfSomeObject = new someObject();
myVector.push_back(instanceOfSomeObject);
return myVector;
}
Run Code Online (Sandbox Code Playgroud)从Python解释器:
objectVar = createSomeObjectForPython()
Run Code Online (Sandbox Code Playgroud)当我在Python中运行它时,我收到此错误:
swig/python detected a memory leak of type 'std::vector< someObject *,std::allocator< someObject * > > *', no destructor found.
Run Code Online (Sandbox Code Playgroud)
这个错误是因为当Python删除向量时,它只能删除向量中的指针而不是它们指向的实际指针.
如果我可以为std :: vector创建一个析构函数,这就是答案,但这是不可能的.
在任何人建议将其作为解决方案之前,我确实需要使用与对象向量相对的指针向量,特别是因为对象很大且复杂,速度是个问题.
我在Windows上使用gcc4.4,swigwin 2.0.4和Python 2.7.