2
파이썬리스트를 생성 한 다음 데이터 아이템을 추가하는 코드가 있습니다. 데이터 항목 중 하나가 NULL로 밝혀지면 목록의 전체 (즉, 이전에 추가 된 항목)가 쓸데없는 것으로 간주되어 목록을 비우고 메모리를 확보하려고합니다. 가비지 컬렉터가 모든 메모리를 확보 할 수 있도록하려면 어떻게해야합니까?C 확장 코드에서 파이썬리스트 해제하기
현재 코드는 다음과 같습니다
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은 다음과 같습니다
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;
하지만 우리는 같은 것을 할 싶습니다?
답장을 보내 주셔서 감사합니다. Ignacio. variantToPython에서 예외를 설정했습니다. – user1554053