×
Namespaces

Variants
Actions
(Difference between revisions)

Abandonos (Leaves)

From Nokia Developer Wiki
Jump to: navigation, search
cabezonxdg (Talk | contribs)
cabezonxdg (Talk | contribs)
m
Line 1: Line 1:
 
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.
 
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.
  
 +
== 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.
 
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 contrustor padrão C++. Qualquer outra inicialização que não possa abandonar pode ser inicializada normalmente no construtor padrão.
 
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.

Revision as of 21:09, 9 June 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 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.

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

124 page views in the last 30 days.