在c#中使用托管c++包装器时正确使用了IDisposable模式
本文关键字:模式 IDisposable c++ 包装 | 更新日期: 2023-09-27 18:06:27
我的c#类创建并使用托管c++对象来包装(分配和使用)非托管c++对象和资源。Managed c++类通过析构函数和终结器正确地实现了IDisposable。因此,我的c#类似乎也应该实现IDisposable。我也想在c#中遵循正确的IDisposable模式。
我不明白以下内容:
- 在我的c#类的Dispose方法中,我应该将我的托管c++对象视为托管或非托管(因为它们依赖于内部的非托管资源)?
是的,你的c#类也应该实现IDisposable。它的Dispose()方法应该只处理c++/CLI对象。不需要终结器,您已经在包装器中实现了一个。您的包装器与许多其他包装操作系统资源的。net类没有什么不同。
例如:class Test : IDisposable {
private CppWrapper obj;
//...
public void Dispose() {
if (obj != null) {
obj.Dispose();
obj = null;
}
}
}