On Wed, 27 Apr 2011 10:32:57 -0400, Alexander <[email protected]> wrote:

On 27.04.2011 16:25, Steven Schveighoffer wrote:

You mean like "dispose" in Tango. That's called when "delete" or "scope" is used.

Yes, that is exactly what I was thinking of (couldn't think of the name!). It's actually used I think in Java and C# as well.

Well, not exactly like this in C# - Dispose() is intended to free any unmanaged resources, which are referenced by object, but not the memory allocated to object itself.

dispose is supposed to be called deterministically (i.e. not by the GC), so yeah, it's the same thing.

basically, dispose cleans up resources *knowing* that all its references are still valid.

The destructor (finalizer) cleans up only resources it knows are not GC managed.

So for instance, if you have a Socket class which contains a file descriptor, and a SocketStream class that contains a Socket, SocketStream.dispose would call Socket.dispose, which would close the file descriptor. But the destructor of SocketStream would not call Socket.dispose, since it does not know if the destructor could be called.

The deallocation of object memory is a separate thing (outside dispose or the destructor).

-Steve

Reply via email to