×
Namespaces

Variants
Actions
Revision as of 21:06, 9 June 2007 by cabezonxdg (Talk | contribs)

Abandonos (Leaves)

From Nokia Developer Wiki
Jump to: navigation, search

Abandonos (Leaves) são utilizados ao invés do sistema tradicional de exceções do C++, a principal razão disso é pelo fato dos abandonos serem mais leves, necessitarem de menos linhas de códigos e também por não serem suportados pelo compilador GNU na época em que Symbian OS foi desenvolvido. Abandonos podem ocorrer como resultado de uma condição de erro ou de um evento anormal, como falta de memória ou de disco para completar uma operação. O abandono propaga o erro a um local no código onde ele pode ser gerenciado, chamado TRAP harness.

No entanto, devido a esse deslocamento, qualquer recurso local como memória alocada dinâmicamente terá sua referência perdida, podendo ocasionar uma brecha na memória. Por isso, programadores trabalhando com Symbian OS utilizam a pilha de limpeza (Cleanup Stack) para manter-se a par dos recursos gerênciados. Na ocorrência de um abandono, a pilha de limpeza irá destruir os recursos do elemento que está em seu topo.

Construtores e destrutores não podem retornar um valor e por isso não pode abandonar. Pensando nisso, foi desenvolvido a contrução em duas fases para evitar que construtores gerem abandonos. Funções que possam gerar um abandono devem ser chamadas no ConstructL (L no final é uma convenção de nome que significa que essa função pode abandonar) ao invés do contrustor padrão C++. Qualquer outra inicialização que não possa abandonar pode ser inicializada normalmente no construtor padrão.

Exemplo:

void CMinhaAplicao::ConstructL(const TRect& aRect)
{
CMinhaAplicacao* self = CMinhaAplicacao(aRect);
CleanupStack::PushL(self);
self->ConstructL(aRect) ;
CleanupStack::Pop(self);
return self;
}
 
CMinhaAplicacao::CMinhaAplicacao()
{
iVariavel = 1;
}

Leitura complementar

Pilha de limpeza - Cleanup Stack
Construtor em 2 fases
Gerência de memória

92 page views in the last 30 days.
×