我正在研究 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
完成任务的正确工具吗?