Pythonリストを作成し、それにデータ項目を追加するコードがいくつかあります。私たちの懸念は、データ項目の1つが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がすべてを解放するのに十分ですか?