Symbian
Symbian Developer Library

SYMBIAN OS V9.4

Feedback

[Index] [Previous] [Next]

#include <e32base.h>
Link against: euser.lib

Class CleanupStack

class CleanupStack;

Description

A collection of static functions that are used to add resources to and remove resources from the cleanup stack.

Members

Defined in CleanupStack:


Member functions


PushL(TAny *)

IMPORT_C static void PushL(TAny *aPtr);

Description

Pushes a pointer to an object onto the cleanup stack.

If a leave occurs while an object is on the stack, it is cleaned up automatically. Untyped objects are cleaned up with User::Free(TAny *) (a rather limited form of cleanup, not even the C++ destructor is called).

Typically, when an object has been fully constructed and it can be guaranteed that a pointer to this new object is stored in some other object before a leave occurs, issue CleanupStack::Pop() to pop it back off the stack.

If no cleanup stack has been allocated, a panic occurs.

It is guaranteed that the object is pushed onto the cleanup stack. However, this function may leave if a stack frame for the next CleanupStack::PushL(TAny *) cannot be allocated. In this case, the cleanup stack will be cleaned up as normal, and no extra programmer intervention is needed.

Parameters

TAny *aPtr

Pointer to any object. If cleanup is necessary, the object will be freed by User::Free(TAny *), which does not invoke any destructor: it simply frees its memory

Panic codes

E32USER-CBase

66 if a call to this function is made when no prior call to TRAP has been made.


PushL(CBase *)

IMPORT_C static void PushL(CBase *aPtr);

Description

Pushes a pointer to an object onto the cleanup stack.

If a leave occurs while an object is on the stack, it is cleaned up automatically. CBase derived objects are cleaned up with delete.

Typically, when an object has been fully constructed and it can be guaranteed that a pointer to this new object is stored in some other object before a leave occurs, issue CleanupStack::Pop() to pop it back off the stack.

If no cleanup stack has been allocated, a panic occurs.

It is guaranteed that the object is pushed onto the cleanup stack. However, this function may leave if a stack frame for the next CleanupStack::PushL(TAny *) cannot be allocated. In this case, the cleanup stack will be cleaned up as normal, and no extra programmer intervention is needed.

Parameters

CBase *aPtr

Pointer to a CBase-derived object. If cleanup is necessary, the object will be freed by delete, thus invoking its destructor, and freeing its memory.

Panic codes

E32USER-CBase

66 if a call to this function is made when no prior call to TRAP has been made.


PushL(TCleanupItem)

IMPORT_C static void PushL(TCleanupItem anItem);

Description

Pushes a cleanup item onto the cleanup stack.

If a leave occurs while a cleanup item is on the stack, the cleanup operation defined in the construction of the TCleanupItem, is invoked.

Typically, when an object has been fully constructed and it can be guaranteed that a pointer to this new object is stored in some other object before a leave occurs, issue CleanupStack::Pop() to pop it back off the stack.

If no cleanup stack has been allocated, a panic occurs.

It is guaranteed that the object is pushed onto the cleanup stack. However, this function may leave if a stack frame for the next CleanupStack::PushL(TAny *) cannot be allocated. In this case, the cleanup stack will be cleaned up as normal, and no extra programmer intervention is needed.

Parameters

TCleanupItem anItem

A cleanup item. If cleanup is necessary, the cleanup operation defined in the construction of anItem is called.

Panic codes

E32USER-CBase

66 if a call to this function is made when no prior call to TRAP has been made.


Pop()

IMPORT_C static void Pop();

Description

Pops an object previously pushed onto the cleanup stack by CleanupStack::PushL(TAny *).

After an object has been successfully constructed and stored within another object, it cannot be orphaned and, therefore, the object (i.e. a pointer or a cleanup item) can be popped from the cleanup stack.

If no cleanup stack has been allocated, or there is nothing on the stack, a panic is raised.


Pop(TInt)

IMPORT_C static void Pop(TInt aCount);

Description

Pops a specified number of objects previously pushed onto the cleanup stack by CleanupStack::PushL(TAny *).

After an object has been successfully constructed and stored within another object, it cannot be orphaned and, therefore, the object(s), that is, pointers and cleanup items can be popped from the cleanup stack.

If no cleanup stack has been allocated, or there is nothing on the stack, a panic is raised.

Parameters

TInt aCount

The number of objects to be popped off the cleanup stack.


PopAndDestroy()

IMPORT_C static void PopAndDestroy();

Description

Pops and cleans up an item pushed onto the stack.

If the item on the stack is a CBase* pointer, the pointer is removed from the stack and the object is destroyed with delete.

If the item on the stack is a TAny* pointer, the pointer is removed from the stack and the memory occupied by the object is freed with User::Free(TAny *).

If the item on the stack is a cleanup item, i.e. an object of type TCleanupItem, the item is removed from the stack and the cleanup operation defined during construction of the TCleanupItem object is invoked.

If no cleanup stack has been allocated, or there is nothing on the stack, a panic occurs.


PopAndDestroy(TInt)

IMPORT_C static void PopAndDestroy(TInt aCount);

Description

Pops and cleans up the specified number of items pushed onto the stack.

If an item on the stack is a CBase* pointer, the pointer is removed from the stack and the object is destroyed with delete.

If an item on the stack is a TAny* pointer, the pointer is removed from the stack and the memory occupied by the object is freed with User::Free(TAny *).

If an item on the stack is a cleanup item, i.e. an object of type TCleanupItem, the item is removed from the stack and the cleanup operation defined during construction of the TCleanupItem object is invoked.

If no cleanup stack has been allocated, or there is nothing on the stack, a panic occurs.

Parameters

TInt aCount

The number of objects to be popped off the cleanup stack and destroyed.


Check(TAny *)

IMPORT_C static void Check(TAny *aExpectedItem);

Description

Checks that the specified object is at the top of the cleanup stack.

If the specified item is not at the top of the cleanup stack, then the function raises an E32USER-CBase 90 panic.

The function is part of Symbian OS in both debug and release builds, and is an aid to debugging.

Parameters

TAny *aExpectedItem

A pointer to the item expected to be at the top of the cleanup stack.


Pop(TAny *)

static inline void Pop(TAny *aExpectedItem);

Description

Pops an object from the top of the cleanup stack.

The function has two modes of operation, depending on whether it is part of a debug build or a release build.

1. In a debug build, the function checks that the specified item is at the top of the cleanup stack before attempting to pop it; an E32USER-CBase 90 panic is raised if the check fails.

2 In a release build, the function just pops the object which is at the top of the cleanup stack; no checking is done.

Parameters

TAny *aExpectedItem

A pointer to the item expected to be at the top of the cleanup stack. In a release build, this parameter is not used.


Pop(TInt,TAny *)

static inline void Pop(TInt aCount, TAny *aLastExpectedItem);

Description

Pops the specified number of objects from the top of the cleanup stack.

The function has two modes of operation, depending on whether it is part of a debug build or a release build.

1. In a debug build, the function pops (aCount-1) items from the cleanup stack, and then checks that the specified item is the next one on the cleanup stack before attempting to pop it; an E32USER-CBase 90 panic is raised if the check fails.

2. In a release build, the function just pops aCount items from the cleanup stack; no checking is done.

Parameters

TInt aCount

The number of items top be popped from the cleanup stack.

TAny *aLastExpectedItem

A pointer to the item expected to be at the top of the cleanup stack, after (aCount-1) items have been popped. In a release build, this parameter is not used.


PopAndDestroy(TAny *)

static inline void PopAndDestroy(TAny *aExpectedItem);

Description

Pops an object from the top of the cleanup stack, and cleans it up.

The function has two modes of operation, depending on whether it is part of a debug build or a release build.

1. In a debug build, the function checks that the specified item is at the top of the cleanup stack before attempting to pop and clean it up; an E32USER-CBase 90 panic is raised if the check fails.

2. In a release build, the function just pops and cleans up the object at the top of the cleanup stack; no checking is done.

Parameters

TAny *aExpectedItem

A pointer to the item expected to be at the top of the cleanup stack. In a release build, this parameter is not used.


PopAndDestroy(TInt,TAny *)

static inline void PopAndDestroy(TInt aCount, TAny *aLastExpectedItem);

Description

Pops the specified number of objects from the top of the cleanup stack, and cleans them up.

The function has two modes of operation, depending on whether it is part of a debug build or a release build.

1. In a debug build, the function pops and cleans up (aCount-1) items from the cleanup stack, and then checks that the specified item is the next one on the cleanup stack before attempting to pop it and clean it up; an E32USER-CBase 90 panic is raised if the check fails.

2. In a release build, the function just pops and cleans up aCount items from the cleanup stack; no checking is done.

Parameters

TInt aCount

The number of items top be popped from the cleanup stack, and cleaned up.

TAny *aLastExpectedItem

A pointer to the item expected to be at the top of the cleanup stack, after (aCount-1) items have been popped and cleaned up. In a release build, this parameter is not used.