On 7/26/17 8:20 PM, Moritz Maxeiner wrote:
On Thursday, 27 July 2017 at 00:00:08 UTC, Steven Schveighoffer wrote:
On 7/26/17 7:28 PM, Moritz Maxeiner wrote:
On Wednesday, 26 July 2017 at 22:33:23 UTC, Steven Schveighoffer wrote:
On 7/26/17 2:33 PM, Moritz Maxeiner wrote:

A finalizer may freely work on non-pointer members and pointer members that target objects outside the GC pool which the programmer knows to be valid at finalization (e.g. they are manually managed). Whether or not it makes sense for the finalizer to call the destructor is something the programmer has to decide on a per use case basis.

No, because a destructor can safely assume it can look at GC members' data. So a finalizer can never call it.

No, whether a finalizer can safely call a destructor depends on the destructor's body. If the destructor doesn't access GC members and doesn't allocate using the GC, the finalizer can safely call it. That's why it's the programmer's job to determine this on a use case basis.


I suppose this is true, but in practice, you wouldn't in a destructor that which is available for a finalizer. In other words, you simply wouldn't implement such a destructor.

It's also very fragile as the maintainer of the destructor is working under different assumptions from the finalizer. If you call the destructor from the finalizer, then the rules of the finalizer infect the destructor.

-Steve

Reply via email to