开发者

Correct use of IDisposable pattern when using Managed C++ wrapper in C#

My C# class creates and uses Managed C++ object that wraps (allocates and uses) unmanaged C++ objects and resources. The Managed C++ class correctly implements IDisposable with Destructor and Finalizer. Therefore, it appears that my C# class should also implement IDisposable. I want to follow correct IDisposable pattern in C#开发者_JAVA技巧 as well.

The following is unclear to me:

  • Within Dispose method of my C# class, should I treat my Managed C++ objects as managed or unmanaged (since they rely on unmanaged resources internally)?


Yes, your C# class should implement IDisposable as well. Its Dispose() method should simply dispose the C++/CLI objects. No need for a finalizer, you already implemented one in your wrappers. Your wrappers are no different from many other .NET classes that wrap an operating system resource.

For example:

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

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜