Artigo: 104248 - Última revisão: terça-feira, 5 de Julho de 2005 - Revisão: 3.1 COMO: Utilizar # pragma init_seg para construção estático do controlo
Nesta páginaSumárioNo compilador C++ de Microsoft, é possível controlar quando os objectos estáticos, declarados no âmbito do ficheiro, são construídos e destructed utilizando a directiva de pré-processador #pragama init_seg. MAIS INFORMAÇÕESExistem quatro opções para a directiva de pré-processador init_seg: compilador, lib, utilizador e "user_defined_segment_name." Em código, esta directiva teria o formulário:
#pragma init_seg(compiler)
#pragma init_seg(lib)
#pragma init_seg(user)
#pragma init_seg("user_defined_segment_name")
O objectivo desta directiva é permitem o programador para agrupar os construtores numa aplicação. Isto é útil se alguns objectos esperado a existência de outros objectos para funcionar correctamente. Objectos que estão agrupados em conjunto utilizando init_seg(compiler) # pragma são construídos antes de todos os outros objectos e destruídos depois de todos os outros objectos na aplicação. Isto é utilizado para objectos nas bibliotecas de tempo de execução. Por exemplo, dado que cin cout poderá e poderá não ser construído, utilizando estes objectos no construtor ou processo de destruição que utiliza o init_seg(compiler) # pragma seriam recomendável com o. Objectos que estão agrupados em conjunto utilizando init_seg(lib) # pragma são construídos depois e destructed antes de objectos que estão em módulos compilados com # pragma init_seg(compiler), mas antes de todos os outros objectos na aplicação. Objectos que estão agrupados em conjunto utilizando init_seg(user) # pragma são construídos depois e destructed antes de objectos que estão em módulos compilados com # pragma init_seg(compiler) e # pragma init_seg(lib). Por outras palavras, objectos que estão agrupados em conjunto utilizando init_seg(user) # pragma são construídos e destructed ao mesmo tempo que todos os outros objectos estáticos que não foram agrupados utilizando # pragma init_seg. A documentação não está totalmente simples neste ponto. Indica que os objectos no grupo de utilizadores são construídos pela última vez. Isto significa que estes objectos são criados depois de e destructed antes dos grupos de compilador e lib. Uma forma que pode controlar a ordem de construção e destruição dentro de cada grupo é alterar a ordem de ligação. Módulos que conste anteriormente na linha de ligação serão construídos depois e destructed antes de módulos que conste posteriormente na linha de ligação que estão no mesmo grupo de init_seg. Construtores denominam-se pela ordem inversa do respectivo aspecto nos segmentos. É importante ter em atenção que a linguagem do C++ não garante qualquer ordem de construção de objectos nonderived; a linguagem do C++ garante que os objectos vão ser criados e que classes base irão ser criadas antes de classes que deriva-los. A directiva de pré-processador # pragma init_seg("user_defined_segment_name") coloca os endereços dos construtores para o segmento lógico "user_defined_segment_name". Esta opção é útil apenas se modificar o código de arranque para chamar estes construtores. O seguinte exemplo de código (quatro ficheiros de origem) demonstra as ideias acima. Depois de compilar todos os ficheiros de origem, ligá-las de duas formas apresentadas abaixo e executar executáveis resultante. A saída de cada um irá mostrar as opções que init_seg estão dependentes de ordem de ligação e que não estão. Com versões do Visual C++ 32-bit Edition, utilize: link file1 file2 file3 file4 /out:demo1.exe link file4 file3 file2 file1 /out:demo2.exe link file1 file2 file3 file4, demo1; link file4 file3 file2 file1, demo2; Código de exemploA informação contida neste artigo aplica-se a:
Tradução automáticaIMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine translation ou MT), não tendo sido portanto revisto ou traduzido por humanos. A Microsoft tem artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais. O objectivo é simples: oferecer em Português a totalidade dos artigos existentes na base de dados do suporte. Sabemos no entanto que a tradução automática não é sempre perfeita. Esta pode conter erros de vocabulário, sintaxe ou gramática? erros semelhantes aos que um estrangeiro realiza ao falar em Português. A Microsoft não é responsável por incoerências, erros ou estragos realizados na sequência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza actualizações frequentes ao software de tradução automática (MT). Obrigado. Clique aqui para ver a versão em Inglês deste artigo: 104248
(http://support.microsoft.com/kb/104248/en-us/
)
| Outros Recursos Outros Sites de Suporte
ComunidadesTraduções de Artigos |






Windows Live
Facebook
Twitter
Linkedin
Digg it
Yahoo
Delicious
StumbleUpon
Yammer
Reddit
Technorati
FriendFeed
Email



Voltar ao topo