Вещи, хранящиеся в стеке, не нужно хранить в стеке очистки (если они не требуют специальной обработки (R-классы и т. Д., См. Ниже))
Стек очистки предназначен для удаления объектов, когда происходит отпуск (думаю, исключение), который в противном случае может привести к утечке памяти.
Фактическое использование стека очистки происходит через статические функции CleanupStack :: PushL (..) и CleanupStack :: Pop / PopAndDestroy.
Некоторые классы, такие как RFile, RF должны закрываться, а не удаляться, поэтому для этих функций вызывается их функция :: Close, поэтому вам следует использовать глобальную функцию CleanupClosePushL (), которая вместо вызова оператора delete для вашего объекта на В противном случае он вызывает функцию класса ':: Close.
Чтобы проверить ваш код на утечки памяти, вы можете использовать макросы __UHEAP_MARK; и __UHEAP_MARKEND; который проверит, что между этими двумя вызовами ничего не осталось в куче.
Если вы оставите что-либо на стеке очистки в CActive's :: RunL, активный планировщик будет паниковать.
В качестве общей методики, если функция, которую вы вызываете , может выйти, (обозначается завершающим символом 'L'), тогда любой очистки, который должен быть удален или закрыт (и т. Д.), Следует добавить в очистку стек.