Python C API логические объекты
Я использую Python C API 2.7.2 с моим консольным приложением C++. Существует одно сомнение в отношении булевых объектов Python C API
Я использую:
PyObject* myVariable = Py_True;
Нужно ли уважать myVariable с Py_DECREF(myVariable)
?
Документация Python C API гласит:
Истинный объект Python. У этого объекта нет методов. Он должен рассматриваться как любой другой объект в отношении количества ссылок.
Я искал вопросы, но не мог найти четкого ответа на него.
Благодарю.
2 ответа
Он должен рассматриваться как любой другой объект в отношении количества ссылок.
Это означает, что вы должны увеличить его, когда берете ссылку
{
Py_INCREF(Py_True);
PyObject* myVariable = Py_True;
и вы должны определить это, когда избавляетесь от него.
Py_DECREF(myVariable);
}
Хотя он не создается динамически, он должен быть подсчитан, поскольку переменные PyObject могут содержать ЛЮБОЙ объект Python. В противном случае потребуется проверка Py_True и других особых случаев, разбросанных по среде исполнения Python, а также любого кода C/C++, использующего API. Это было бы грязно и подвержено ошибкам.