2010-06-07 4 views
5

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

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

Благодаря

ответ

2

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

3

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

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

Смежные вопросы