On Wednesday, 12 November 2014 at 13:56:08 UTC, Shachar Shemesh
wrote:
On 12/11/14 11:29, "Marc =?UTF-8?B?U2Now7x0eiI=?=
<schue...@gmx.net>" wrote:
Supposedly, a struct destructor will only access resources
that the
struct itself manages. As long as that's the case, it will be
safe. In
practice, there's still a lot that can go wrong.
Either a struct's destructor can be run from the context of a
GC, in which case it should run when the struct is directly
allocated on the heap, or it is not, in which case the fact it
is run when the struct is inside a class should be considered a
bug.
Today it happens for structs nested in classes, but not
allocated directly. I don't see any situation in which this is
not a bug.
Shachar
I think it's helpful to ask the question who's responsible for
destroying an object. If it's the GC, then it's finalization, if
it's no the GC, it's destruction. Both a destructor and a
finalizer need to clean up themselves, and any other object they
own. This includes embedded structs, but not GC managed objects
created by the constructor.
This applies to both structs and classes as the owning objects,
and manual/automatic management as well as GC.
But indeed, what's implemented today is inconsistent.