2008-12-08 4 views
16

Я пытаюсь Dispose из IDisposable объекта (FileStream^фс) в управляемом C++ (.Net 2.0), и я получаю ошибкуКак выбрасывании из IDisposable в управляемый C++

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

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

fs->~FileStream(); 

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

+0

У меня тоже была эта проблема, спасибо, что спросили об этом. – demoncodemonkey 2009-06-04 13:01:26

ответ

25

Правильный образец, чтобы просто удалить объект:

delete fs; 

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

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

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

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

+0

Еще лучше, что это автоматически происходит через члены, определенные с помощью семантики стиля стека. – morechilli 2008-12-08 17:24:55