【发布时间】:2012-07-26 09:26:59
【问题描述】:
我们有一些代码可以创建一个 python 列表,然后将数据项附加到它上面。我们担心的是,如果其中一个数据项结果为 NULL,那么我们认为整个列表(即任何先前添加的项)都毫无价值,我们想释放列表和它的内存。我需要做什么来确保垃圾收集器释放所有内存?
目前的代码是:
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;
但我们想做这样的事情:
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);
}
else
{
Py_DECREF(retval);
retval = 0;
break;
}
}
return retval;
那么列表对象上的 DECREF 是否足以确保 GC 释放所有内容?
【问题讨论】:
标签: python c list free python-extensions