Some cleanup requirements must be handled by the cleanup code after
the trap harness, on discovering that the leave code is not
KErrNone
. The cleanup requirements may include:
rolling back changes to restore an object to the state it was in before the function which left was invoked
For instance, a “set font” command might have been issued for some characters in a line, and might fail because of lack of memory: the line should be restored to its previous state.
Rollback is not always easy. Often, it’s simpler to prepare a change that would be guaranteed to work, and apply it if the change was prepared successfully. If a leave occurred in the act of preparing a change, the change can be destroyed. It’s usually easier to destroy a change than to roll it back.
destroying a partially-constructed object
Most requirements for destroying partially-constructed objects will be dealt with by the cleanup stack. There may be a requirement to destroy some partially-constructed objects as part of rollback processing.
closing files and other such resources, where this is not encapsulated in use of the cleanup stack