Python - как проверить, доступна ли слабая ссылка - PullRequest
5 голосов
/ 08 июня 2010

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

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

Спасибо

Ответы [ 2 ]

3 голосов
/ 08 июня 2010

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

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

2 голосов
/ 08 июня 2010

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

...