×
Namespaces

Variants
Actions
(Difference between revisions)

Abandonos (Leaves)

From Nokia Developer Wiki
Jump to: navigation, search
TK2000 (Talk | contribs)
hamishwillee (Talk | contribs)
m (Hamishwillee - Bot addition of Template:ArticleMetaData)
 
(11 intermediate revisions by 3 users not shown)
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 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.
+
{{ArticleMetaData
 +
|sourcecode= <!-- Link to example source code e.g. [[Media:The Code Example ZIP.zip]] -->
 +
|installfile= <!-- Link to installation file (e.g. [[Media:The Installation File.sis]]) -->
 +
|devices= <!-- Devices tested against - e.g. ''devices=Nokia 6131 NFC, Nokia C7-00'') -->
 +
|sdk= <!-- SDK(s) built and tested against (e.g. [http://linktosdkdownload/ Nokia Qt SDK 1.1]) -->
 +
|platform= <!-- Compatible platforms - e.g. Symbian^1 and later, Qt 4.6 and later -->
 +
|devicecompatability= <!-- Compatible devices e.g.: All* (must have internal GPS) -->
 +
|dependencies= <!-- Any other/external dependencies e.g.: Google Maps Api v1.0 -->
 +
|signing=<!-- Signing requirements - empty or one of: Self-Signed, DevCert, Manufacturer -->
 +
|capabilities=<!-- Capabilities required by the article/code example (e.g. Location, NetworkServices. -->
 +
|keywords= <!-- APIs, classes and methods (e.g. QSystemScreenSaver, QList, CBase -->
 +
|id= <!-- Article Id (Knowledge base articles only) -->
 +
|language=Lang-Portuguese
 +
|translated-by= <!-- [[User: XXXXX]] -->
 +
|translated-from-title=<!-- Title only -->
 +
|translated-from-id= <!-- Id of translated revision -->
 +
|review-by=<!-- After re-review: [[User:username]] -->
 +
|review-timestamp=<!-- After re-review: YYYYMMDD -->
 +
|update-by=<!-- After significant update: [[User:username]]-->
 +
|update-timestamp=<!-- After significant update: YYYYMMDD -->
 +
|creationdate=20070527
 +
|author=[[User:Cabezonxdg]]
 +
}}[[Category:Symbian C++]]
 +
== Introdução ==
 +
Um código em Symbian é dito que abandona quando um erro em tempo de execução ocorre. Abandonos fazem parte do mecanismo próprio de exceção implementado pelo c++ para Symbian OS, eles seriam análogos ao <tt>throw</tt> de c++ padrão e são utilizados no lançamento de exceções.  
  
== Pilha de limpeza ==
+
Segundo a conveção de nomes adotada pelo SymbianC++ funções que abandonam tem seu nome terminado por L indicando ao quem usá-las que tal função pode abandonar. Uma função ao abandonar emite um código de erro indicando o motivo pelo qual a operação falhou.  
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 ==
+
Funções podem abandonar se:
  
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.
+
* Fizerem chamadas a outras funções que abandonam fora de uma <tt>TRAP</tt>;
 +
* Chamando uma das funções do sistema utilizadas para lançar abandonos, exemplo: <tt>User::Leave()</tt>;
 +
* Fizerem uso do operador sobrecarregado <tt>new</tt>.
  
Exemplo:
+
[[Category:Lang-Portuguese]][[Category: Essential Idioms]]
 
+
<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>
+
 
+
== 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++]]
+

Latest revision as of 07:06, 10 November 2011

Article Metadata

Artigo
Criado por cabezonxdg em 27 May 2007
Última alteração feita por hamishwillee em 10 Nov 2011

[edit] Introdução

Um código em Symbian é dito que abandona quando um erro em tempo de execução ocorre. Abandonos fazem parte do mecanismo próprio de exceção implementado pelo c++ para Symbian OS, eles seriam análogos ao throw de c++ padrão e são utilizados no lançamento de exceções.

Segundo a conveção de nomes adotada pelo SymbianC++ funções que abandonam tem seu nome terminado por L indicando ao quem usá-las que tal função pode abandonar. Uma função ao abandonar emite um código de erro indicando o motivo pelo qual a operação falhou.

Funções podem abandonar se:

  • Fizerem chamadas a outras funções que abandonam fora de uma TRAP;
  • Chamando uma das funções do sistema utilizadas para lançar abandonos, exemplo: User::Leave();
  • Fizerem uso do operador sobrecarregado new.
This page was last modified on 10 November 2011, at 07:06.
79 page views in the last 30 days.
×