Python - как проверить, доступна ли слабая ссылка
Я передаю некоторые слабые ссылки из Python в класс C++, но деструкторы C++ активно пытаются получить доступ к ссылке, когда реальный объект уже мертв, очевидно, он падает...
Есть ли какой-либо подход Python C/API, чтобы узнать, жива ли ссылка на Python, или какой-либо другой известный обходной путь для этого?
Спасибо
2 ответа
Если вы вызываете PyWeakref_GetObject для слабой ссылки, он должен возвращать либо Py_None, либо NULL, я забыл, какой. Но вы должны проверить, возвращает ли он один из них, и это скажет вам, что указанный объект больше не жив.
Из документации Python C API:
PyObject * PyWeakref_GetObject (PyObject * ref)
Возвращаемое значение: Заимствованная ссылка.
Вернуть ссылочный объект из слабой ссылки, ref. Если референт больше не активен, возвращается None. Новое в версии 2.2.