×
Namespaces

Variants
Actions
(Difference between revisions)

Abandonos (Leaves)

From Nokia Developer Wiki
Jump to: navigation, search
TK2000 (Talk | contribs)
dcrocha (Talk | contribs)
Line 34: Line 34:
  
 
[[Category:Lang-PT]]
 
[[Category:Lang-PT]]
[[Category:PT Symbian C++]]
+
[[Category:Symbian C++ (Português)]]

Revision as of 18:18, 26 October 2007

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 espaço em disco (ou falta de espaço no cartão de memória flash) para completar uma operação. O abandono propaga o erro a um local no código onde ele pode ser gerenciado, chamado TRAP harness.

Pilha de limpeza

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.

Construção em duas fases

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 construtor 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

123 page views in the last 30 days.

Was this page helpful?

Your feedback about this content is important. Let us know what you think.

 

Thank you!

We appreciate your feedback.

×