First page Back Continue Last page Summary Text


We should be able to see that the code is structured in such a way that if the object creations succeed then the dispose() method will be invoked on either the original or the replacement instances.
We've now reduced our assumptions to:
The clone() methods themselves are strongly exception safe.
Which seems reasonable. But beware: we have slyly introduced another assumption:
no exceptions are propagated by the dispose() calls.
I don't know what the client code can be expected to do in the event that an attempt to free resources fails – so I'm comfortable with this assumption. But we should be explicit about making it.
In addition to this we've also got a place where we can (carefully!) insert additional code that might throw exceptions – this may be needed if we have additional work to do within Whole as part of this method.
If you remember the earlier example if the Allocate-Use-Release motif then you will see the similarity, and may even spot a slight generalisation to this scheme – checking the value returned (for example: if (null != t1)...).