On 2010-08-11 16:14:56 -0400, Don <[email protected]> said:
Michel Fortin wrote:
Sure, and now you can't use std.containers.Array as a member in a
Class, neither std.stdio.File, etc. Is there something left classes can
do?
As far as I can tell, the use cases for finalizers are very limited. To
me, destructors don't make any sense unless they are deterministic.
For example, I think having a File class is probably a bug. You may be
on a system which has no limit on the number of file handles, but
generally, if you need resource management, you need a guarantee that
the destructor will be called.
If a file handle is stored as part of a class, with a destructor that
closes the file, the file might never get closed. So I don't think it's
unreasonable to say that a struct with a destructor cannot be a member
of a class.
Yes, this might make sense for a file handle. But not all struct
destructors handle such kind of resource. The other example was
std.containers.Array. Should its use be disallowed in a class?
Personally I think destructors should be restricted to structs and
scope classes. I suspect that some form of registration with the gc
could do the job of finalizers.
Destructor <=> deterministic destruction.
Having a clear distinction between destructors and finalizers certainly
makes sense.
--
Michel Fortin
[email protected]
http://michelf.com/