2008-12-08 4 views
16

Ich versuche, die FehlerWie Sie von einem IDisposable verfügen in Managed C++

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

Es sagt Verfügungs eines IDisposable Objekt (Filestream^fs) in Managed C++ (.NET 2.0) und bin immer dass ich stattdessen den Destruktor aufrufen sollte. Ruft

fs->~FileStream(); 

Aufruf der dispose-Methode für das FileStream-Objekt? Warum kann ich nicht Dispose anrufen?

+0

Ich hatte dieses Problem auch, danke für die Nachfrage. – demoncodemonkey

Antwort

25

Die richtigen Muster sind nur das Objekt zu löschen:

delete fs; 

Dies wird in einen Aufruf übersetzt werden zu entsorgen()

diese post Siehe für einige der Details, was unter vorgeht die Haube. Der Vorteil dieses Idiom ist, dass es Sie schreiben können:

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

und haben die Dispose-Methode richtig ... entspricht einem mit Block in C# bezeichnet. Das Dateistream-Objekt wird weiterhin auf dem verwalteten Heap zugeordnet.

+0

Noch besser ist die Art und Weise, wie diese automatisch durch die mit Stack-Stil-Semantik definierten Member kettet. – morechilli

+0

Schöne einfache Antwort, danke – demoncodemonkey

+3

Ich habe dies vergessen und diese Antwort wieder verwendet. Ich wünschte, ich könnte zweimal akzeptieren/abstimmen! – brian

Verwandte Themen