0

我正在研究 Python 互操作。在内部,Python 通过Py_IncRef和为所有对象保存引用计数器Py_DecRef。我想确保正确完成指向 Python 对象的指针,所以我试图创建一个PyHandle派生自的类,SafeHandle它会调用Py_DecRef.ReleaseHandle

问题是:与 Windows API 不同,Python 在返回指向对象的指针之前不会增加 refcount。所以当互操作创建一个实例时PyHandle,我希望它调用Py_IncRef指针。但是,我没有看到可以覆盖的方法。SafeHandle构造函数采用无效的句柄值,并且没有AcquireHandle覆盖。CoreCLR 代码也有不可覆盖的SetHandle方法(参见SafeHandle.cs)。

我可以做些什么来调用互操作构建的Py_IncRef时间?PyHandle

SafeHandle完成任务的正确工具吗?

4

1 回答 1

0

SafeHandle没有将句柄传递给它的公共方法。因此,在将句柄传递给受保护的基本方法Py_IncRef 之前,请随意调用。

但是,SafeHandle对于您的目的来说,这可能有点矫枉过正,因为它维护自己的引用计数器,这对于维护它自己的引用计数的句柄来说并不是真正需要的。

于 2019-09-11T23:43:11.920 回答