我只是想了解在使用 Python C API 时如何处理引用计数。
我想在 C++ 中调用 Python 函数,如下所示:
PyObject* script;
PyObject* scriptRun;
PyObject* scriptResult;
// import module
script = PyImport_ImportModule("pythonScript");
// get function objects
scriptRun = PyObject_GetAttrString(script, "run");
// call function without/empty arguments
scriptResult = PyObject_CallFunctionObjArgs(scriptRun, NULL);
if (scriptResult == NULL)
cout << "scriptResult = null" << endl;
else
cout << "scriptResult != null" << endl;
cout << "print reference count: " << scriptResult->ob_refcnt << endl;
pythonScript.py 中的 Python 代码非常简单:
def run():
return 1
“PyObject_CallFunctionObjArgs”的文档说你得到一个新的引用作为返回值。所以我希望“scriptResult”的引用计数为 1。但是输出是:
scriptResult != null
print reference count: 72
此外,如果我在不减少引用计数的情况下循环执行此操作,我预计会发生内存泄漏。然而,这似乎不会发生。
有人可以帮我理解吗?
亲切的问候!