Python - как проверить, доступна ли слабая ссылка все еще

Я передаю некоторый weakrefs из Python в класс C++, но деструкторы C++ активно пытаются получить доступ касательно того, когда реальный объект уже мертв, очевидно, он отказывает...

Есть ли какой-либо подход C/API Python, чтобы узнать, жива ли ссылка Python все еще или какое-либо другое известное обходное решение для этого?

Спасибо

5
задан Alex 7 June 2010 в 21:43
поделиться

2 ответа

Если вы вызываете PyWeakref_GetObject для слабой ссылки, он должен вернуть либо Py_None, либо NULL, я забыл, какой именно. Но вы должны проверить, возвращает ли он один из них, и это скажет вам, что указанный объект больше не жив.

2
ответ дан 14 December 2019 в 19:01
поделиться

Из Python C API документация:

PyObject * PyWeakref_GetObject (PyObject * ref)
Возвращаемое значение: Заимствованная ссылка.
Вернуть указанный объект из слабой ссылки, ref. Если референт больше не существует, не возвращает None. Новое в версии 2.2.

3
ответ дан 14 December 2019 в 19:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: