Reference Counting

本节中的宏用于 ManagementPython 对象的引用计数。

  • 无效Py_INCREF(PyObject ** o *)

    • 增加对象* o 的引用计数。该对象不能为 NULL ;如果不确定它不是 NULL *,请使用Py_XINCREF()
  • 无效Py_XINCREF(PyObject ** o *)

    • 增加对象* o 的引用计数。该对象可能是 NULL *,在这种情况下,宏无效。
  • 无效Py_DECREF(PyObject ** o *)

    • 减少对象* o 的引用计数。该对象不能为 NULL ;如果不确定它不是 NULL ,请使用Py_XDECREF()。如果引用计数达到零,则调用对象类型的释放函数(不得为 NULL *)。

Warning

释放Function可以导致调用任意 Python 代码(例如,使用del()方法的类实例被释放时)。虽然此类代码中的异常不会传播,但是执行的代码可以自由访问所有 Python 全局变量。这意味着在调用Py_DECREF()之前,从全局变量可访问的任何对象应处于一致状态。例如,从列表中删除对象的代码应将对引用的引用复制到一个临时变量中,删除该对象,更新列表数据结构,然后为临时变量调用Py_DECREF()

  • 无效Py_XDECREF(PyObject ** o *)

    • 减少对象* o 的引用计数。该对象可以是 NULL *,在这种情况下宏无效。否则,效果与Py_DECREF()相同,并且适用相同的警告。
  • 无效Py_CLEAR(PyObject ** o *)

    • 减少对象* o 的引用计数。该对象可以是 NULL ,在这种情况下宏无效。否则效果与Py_DECREF()相同,除了参数也设置为 NULL 。对于Py_DECREF()的警告不适用于所传递的对象,因为宏在减小其引用计数之前会谨慎使用临时变量并将参数设置为 NULL *。

每当减少在垃圾回收期间可能遍历的变量的值时,最好使用此宏。

2.4 版的新Function。

以下函数用于 Python 的运行时动态嵌入:Py_IncRef(PyObject *o)Py_DecRef(PyObject *o)。它们只是分别导出的函数版本Py_XINCREF()Py_XDECREF()

以下函数或宏仅在解释器内核内使用:_Py_Dealloc()_Py_ForgetReference()_Py_NewReference()以及全局变量_Py_RefTotal