On 14/10/2015 14:54, Roger Riggs wrote:
Being able to subclass the XXXCleanable classes allows more efficient
implementation of the cleaners
in both size and performance. The subclass adds the necessary state
for the cleanup and implements
the performCleanup method. Only a single object is created (and
gc'd), reducing the size of headers
and cross references between separate objects. Only the
performCleanup method is overridable to
maintain the robustness of the Cleaner implementation.
If the XXXCleaner classes are not subclassed, a separate object is
needed for the state and behavior.
Either that extra object is created by the binding if lambda is used,
or by the class needing the cleanup.
It is not a big cost but is proposed to optimize the design and
implementation.
Peter's email [1] provided another description of the use case for
subclassing.
I'm working on a webrev to show how the Cleaner would be used instead
of finalizers
and it will show use use of both lambdas and explicit cleanup classes.
No issue with sub-classing for the implementation, it's just not clear
why they need to be in the public API.
-Alan