Avoiding memory leaks during transfer of ownership
The following code demonstrates a common pattern for creating memory leaks:
If the construction of CFoo succeeds, but then the function call that is supposed to take ownership of it fails, then the newly-created CFoo instance is orphaned.
The only way to do this safely is to use the cleanup stack:
CFoo* foo = CFoo::NewL(); CleanupStack::PushL(foo); User::LeaveIfError(bar.TakesOwnershipIfSuccessful(foo)); CleanupStack::Pop(foo);
The most common situations where these kind of leaks occur are array operations such as Append() or Insert().