Avoiding memory leaks during transfer of ownership
Article Metadata
Compatibility
Platform(s): S60
Article
Created: User:Technical writer 1
(26 Nov 2007)
Last edited: hamishwillee
(15 Jun 2012)
Description
The following code demonstrates a common pattern for creating memory leaks:
User::LeaveIfError(bar.TakesOwnershipIfSuccessful(CFoo::NewL()));
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.
Solution
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().

