7

PythonからいくつかのweakrefをC++クラスに渡していますが、実際のオブジェクトがすでに死んでいるときに、C++デストラクタが積極的にrefにアクセスしようとしています。明らかにクラッシュします...

Pythonリファレンスがまだ生きているかどうかを確認するためのPythonC/ APIアプローチ、またはこれに対する他の既知の回避策はありますか?

ありがとう

4

2 に答える 2

4

Python C APIドキュメントから:

PyObject * PyWeakref_GetObject(PyObject * ref)
戻り値:借用された参照。
弱参照から参照されたオブジェクトを返します。指示対象がもう生きていない場合は、Noneを返します。バージョン2.2の新機能。

于 2010-06-07T21:48:13.577 に答える
3

弱参照でPyWeakref_GetObjectを呼び出すと、Py_NoneまたはNULLのいずれかが返されるはずですが、どちらかを忘れています。ただし、それらの1つが返されるかどうかを確認する必要があります。これにより、参照されるオブジェクトが存在しなくなったことがわかります。

于 2010-06-07T21:48:43.810 に答える