我正在尽最大努力在我们项目中一个非常重要的模块中查找内存泄漏,并得到如下代码片段:
PyObject* python_func( const char* str )
{
..........................
boost::python::list obj;
obj.append(str);
obj.ptr()->ob_refcnt++; //this is necessary??
return obj.ptr();
}
我对这条线感到困惑:obj.ptr()->ob_refcnt++;
我认为 ob_refcnt 是由 python 内部为 gc 维护的,我们不能操作它,所以很明显这会导致内存泄漏,另一方面,obj 将离开它的范围,我不确定 boost::python: :list deconstructor 将减少 ob_refcnt,如果是这样,删除该行,资源 obj 持有将被释放,这将导致崩溃。
所以我的问题是是否obj.ptr()->ob_refcnt++;
有必要,为什么?