Правильное использование шаблона IDisposable при использовании оболочки Managed C ++ в C # - PullRequest
2 голосов
/ 23 августа 2011

Мой класс C # создает и использует управляемый объект C ++, который упаковывает (выделяет и использует) неуправляемые объекты и ресурсы C ++. Класс Managed C ++ правильно реализует IDisposable с помощью Destructor и Finalizer. Следовательно, похоже, что мой класс C # также должен реализовывать IDisposable. Я хочу следовать правильному шаблону IDisposable в C #.

Мне непонятно следующее:

  • В методе Dispose моего класса C # мне следует относиться к моим управляемым объектам C ++ как к управляемым или неуправляемым (поскольку они полагаются на неуправляемые ресурсы внутри)?

1 Ответ

3 голосов
/ 23 августа 2011

Да, ваш класс C # также должен реализовывать IDisposable. Его метод Dispose () должен просто удалять объекты C ++ / CLI. Нет необходимости в финализаторе, вы уже внедрили его в свои оболочки. Ваши оболочки не отличаются от многих других классов .NET, которые оборачивают ресурс операционной системы.

Например:

class Test : IDisposable {
    private CppWrapper obj;
    //...
    public void Dispose() {
       if (obj != null) { 
           obj.Dispose();
           obj = null;
       }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...