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.

Другие вопросы по тегам