copyValueOf()—strongly exception-safe.
- By Alan Griffiths
- February 24, 2001
public void copyValueOf(
Whole source) {
PartOne t1 = rhs.p1.clone();
if (null != t1) {
try {
PartTwo t2 = rhs.p2.clone();
if (null != t2) {
try {
// examples of methods
// that might throw
t1.setParent(this);
t2.setParent(this);
// ********************************
// This is the pivotal point of the
// code - everything that could
// fail is before this point.
// Nothing that makes persistent
// changes to the state of the
// system is before this point.
// ********************************
// The following commits
// the change to the
// system state.
// Importantly it won't
// throw.
PartOne swap1 = t1;
ti = p1; p1 = swap1;
PartTwo swap2 = t2;
t2 = p2; p2 = swap2;
}
finally {
// either frees the
// original resources or
// of the temporary -
// depending whether we
// passed the pivot
// uneventfully.
t2.dispose();
}
}
}
finally {
// either frees the original
// resources or
// of the temporary -
// depending whether we
// passed the pivot
// uneventfully.
t1.dispose();
}
)
}