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