2
我們有一些代碼會創建一個python列表,然後將數據項添加到它。我們擔心的是,如果其中一個數據項變爲NULL,那麼我們認爲整個列表(即任何以前添加的項目)都毫無價值,我們想要釋放列表和它的內存。我需要做些什麼來確保垃圾收集器釋放所有內存?從C擴展代碼中釋放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;
,但我們想要做的是這樣的:
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;
所以是列表對象足以保證GC釋放一切的DECREF?
感謝您的回答伊格納西奧。我們在variantToPython中設置了一個異常。 – user1554053 2012-07-26 09:37:46