×
Namespaces

Variants
Actions
(Difference between revisions)

Abandonos (Leaves)

From Nokia Developer Wiki
Jump to: navigation, search
cabezonxdg (Talk | contribs)
(New page: Ao invés das exceções de C++, que não faziam parte do C++ Standard quando o Symbian foi projetado, o sistema operacional utiliza uma forma mais leve para gerenciar exceções chamada d...)
 
cabezonxdg (Talk | contribs)
Line 1: Line 1:
Ao invés das exceções de C++, que não faziam parte do C++ Standard quando o Symbian foi projetado, o sistema operacional utiliza uma forma mais leve para gerenciar exceções chamada de leave (abandono). 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.
  
 
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.
  
Alguns locais importantes nunca devem abandonar , conhecidos como construtores e destrutores. Por isso classes em Symbian OS normalmente utilizam a construção em duas fases para evitar a ocorrência de abandonos na construção do código.
+
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:
 +
 +
<code cpp>
 +
 +
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;
 +
}
 +
</code cpp>
 +
 
== Leitura complementar ==
 
== Leitura complementar ==
  
Line 11: Line 30:
 
[[Gerência de memória]]<br>
 
[[Gerência de memória]]<br>
  
[[Category:Symbian C++]]
 
 
[[Category:Lang-PT]]
 
[[Category:Lang-PT]]
 +
[[Category:PT Symbian C++]]

Revision as of 21:06, 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.

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;
}
</code cpp>
 
== Leitura complementar ==
 
[[Pilha de limpeza - Cleanup Stack]]<br>
[[Construtor em 2 fases]]<br>
[[Gerência de memória]]<br>
 
[[Category:Lang-PT]]
[[Category:PT Symbian C++]]
89 page views in the last 30 days.
×