On 11/17/14 6:38 PM, Vladimir Panteleev wrote:
On Monday, 17 November 2014 at 22:40:36 UTC, Steven Schveighoffer wrote:
On 11/17/14 5:19 PM, Vladimir Panteleev wrote:
On Monday, 17 November 2014 at 16:40:18 UTC, ketmar via
Digitalmars-d-learn wrote:
On Mon, 17 Nov 2014 15:41:25 +0000
Andre via Digitalmars-d-learn <digitalmars-d-learn@puremagic.com>
wrote:

   ~this()
   {
       foreach(cp; this._columns)
       {
       }
   }
don't do that in destructors. `_columns` field can be already collected
by GC.

Last I checked, the GC finalizes all dead objects before freeing them.

The GC is not guaranteed to finalize them all before freeing them all.

I would not count on that property -- even if it's currently true.
Expect that any GC-allocated memory in your dtor is invalid except for
the memory of the object itself.

That's disappointing because it makes destructors considerably less
useful. I think that at this point, this will probably become a
guarantee for compatibility with existing code.

destructors are *strictly* for freeing non-GC resources. That has been in the spec from Day 1 (well, at least the earliest I can remember), and it's the same for other GC-based systems as well, such as Java.

I don't want to say that making this requirement would hinder performance, but I'd hate to lock us into the current GC model, as it pretty much sucks performance-wise. I'd rather keep as many options open as possible, to allow GC tinkering for performance.

-Steve

Reply via email to