我们有一些代码可以创建一个python列表,然后将数据项附加到其中。我们关心的是,如果其中一个数据项是空的,那么我们会认为整个列表(即之前添加的任何项)都没有价值,我们希望释放该列表及其内存。我需要做些什么来确保垃圾回收器释放所有内存?
当前代码为:
PyObject* retval = PyList_New(0);
QList<QVariant> varList = value.toList();
foreach(QVariant var, varList)
{
// variantToPython(var) returns either NULL
// or a valid object whose reference count is 1
PyObject *pyVar = variantToPython(var);
if (pyVar)
{
PyList_append(retval, pyVar);
Py_DECREF(pyVar);
}
}
return retval;
但我们想做的是:
^{pr2}$那么list对象上的DECREF是否足以确保GC释放所有内容?
是的,因为
PyList_New()
创建了一个refcount为1的对象。不过,在返回之前应该设置一个适当的异常。在相关问题 更多 >
编程相关推荐