Как вы избавляетесь от IDisposable в управляемом С++

Я пытаюсь удалить объект IDisposable (FileStream ^ fs) в управляемом С++ (.Net 2.0) и получаю ошибку

'Dispose' : is not a member of 'System::IO::FileStream'

В нем говорится, что я должен вызывать деструктор вместо этого. Позвонит

fs->~FileStream();

вызвать метод dispose на объекте FileStream? Почему я не могу вызвать Dispose?

Ответы

Ответ 1

Правильный шаблон - просто удалить объект:

delete fs;

Это будет переведено на вызов Dispose()

См. этот post для некоторых деталей того, что происходит под капотом. Преимущество этой идиомы заключается в том, что она позволяет вам писать:

{
  FileStream fs(...)
  ...
}

И пусть метод Dispose вызывается правильно... эквивалентно использующему блоку в С#. Объект потока файлов по-прежнему распределяется по управляемой куче.