2008-12-08 11 views
16

Estoy tratando de disponer de un objeto IDisposable (FileStream^fs) en C++ administrado (.NET 2.0) y estoy consiguiendo el error¿Cómo deshacerse de un IDisposable en C++ administrada

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

Dice que debería invocar al destructor en su lugar. ¿Llamará al método de eliminación en el objeto FileStream llamando a

fs->~FileStream(); 

? ¿Por qué no puedo llamar Dispose?

+0

Tuve este problema también, gracias por preguntarlo. – demoncodemonkey

Respuesta

25

El patrón correcto es simplemente eliminar el objeto:

delete fs; 

Esto se traduce en una llamada a Dispose()

ver este post para algunos de los detalles de lo que está pasando debajo la capucha. La ventaja de este lenguaje es que le permite escribir:

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

y tienen el llamado método Dispose correctamente ... equivalente a un bloque using en C#. El objeto de secuencia de archivos todavía se asigna en el montón administrado.

+0

Aún mejor es la forma en que esto se encadena automáticamente a través de los miembros definidos con semántica de estilo de pila. – morechilli

+0

Buena respuesta simple, gracias – demoncodemonkey

+3

Olvidé esto y usé esta respuesta nuevamente. ¡Ojalá pudiera aceptar/votar dos veces! – brian

Cuestiones relacionadas