在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#中使用托管c++包装器时正确使用了IDisposable模式

是的,你的c#类也应该实现IDisposable。它的Dispose()方法应该只处理c++/CLI对象。不需要终结器,您已经在包装器中实现了一个。您的包装器与许多其他包装操作系统资源的。net类没有什么不同。

例如:

class Test : IDisposable {
    private CppWrapper obj;
    //...
    public void Dispose() {
       if (obj != null) { 
           obj.Dispose();
           obj = null;
       }
    }
}