2010-06-07 11 views
5

Przekazuję niektóre weakrefs z Pythona do klasy C++, ale destruktory C++ aktywnie próbują uzyskać dostęp do ref, gdy prawdziwy obiekt jest już martwy, oczywiście ulega awarii ...Python - jak sprawdzić, czy słaba referencja jest nadal dostępna

Czy istnieje podejście Python C/API, aby dowiedzieć się, czy odwołanie Pythona jest wciąż żywe lub inne znane obejście tego problemu?

Dzięki

Odpowiedz

2

Jeśli wywołasz PyWeakref_GetObject na słabym odwołaniu, powinieneś zwrócić wartość Py_None lub NULL, zapomniałem, które. Ale powinieneś sprawdzić, czy zwraca jeden z nich, a to ci powie, że obiekt, do którego się odwołuje, nie jest już żywy.

3

Od Python C API dokumentacji:

PyObject * PyWeakref_GetObject (PyObject * ref) Wartość
Powrót: Borrowed odniesienia.
Zwraca przywoływany obiekt ze słabego odwołania, ref. Jeśli referent nie jest już aktywny, zwraca Brak. Nowość w wersji 2.2.

Powiązane problemy