On 11/6/16 11:01 PM, thedeemon wrote:
On Monday, 7 November 2016 at 02:22:35 UTC, Steven Schveighoffer wrote:
OP: it's not legal to destroy or even access GC allocated members in a
destructor. The GC may have already destroyed that data.

Isn't destroy() fine there? It doesn't call destructors for already
destroyed objects, so I guess it should be safe. (assuming the
destructors don't do any allocations)

The problem is that you don't know when the GC has destroyed that object. It may have been freed and already reallocated to something else. The time between when your object becomes garbage and when it's collected is not explicitly defined. Nor is the order of collection or if it will even be collected at all.

Another possibility is that your object destroys something that is pointed at by someone else. This is not a horrible condition, but could result in some unwanted segfaults.

Hence, just don't access members from the destructor. You'll be glad you didn't.

-Steve

Reply via email to