Pensar en C++ (Volumen 1) - Grupo ARCO

Pensar en C++ (Volumen 1) - Grupo ARCO Pensar en C++ (Volumen 1) - Grupo ARCO

arco.esi.uclm.es
from arco.esi.uclm.es More from this publisher
13.01.2015 Views

✐ ✐ ✐ “Volumen1” — 2012/1/12 — 13:52 — page 296 — #334 ✐ Capítulo 10. Control de nombres plataforma determinada y, de golpe y misteriosamente, compilarlo en otro entorno y que deje de funcionar. 10.4.1. Qué hacer Existen tres aproximaciones para tratar con este problema: 1. No hacerlo. Evitar las dependencias de inicialización estática es la mejor solución. 2. Si debe hacerlo, coloque las definiciones de objetos estáticos críticos en un único fichero, de forma que pueda controlar, de forma portable, su inicialización colocándolos en el orden correcto. 3. Si está convencido que es inevitable dispersar objetos estáticos entre unidades de traducción diferentes (como en el caso de una librería, donde no puede controlar el programa que la usa), hay dos técnicas de programación para solventar el problema. Técnica uno El pionero de esta técnica fue Jerry Schwarz mientras creaba la librería iostream (puesto que las definiciones para cin, cout y cerr son static y residen en archivos diferentes). Realmente es inferior a la segunda técnica pero ha pululado durante mucho tiempo por lo que puede encontrarse con código que la utilice; así pues, es importante que entienda como funciona. Esta técnica requiere una clase adicional en su archivo de cabecera. Esta clase es la responsable de la inicialización dinámica de sus objetos estáticos de librería. He aquí un ejemplo simple: //: C10:Initializer.h // Static initialization technique #ifndef INITIALIZER_H #define INITIALIZER_H #include extern int x; // Declarations, not definitions extern int y; class Initializer { static int initCount; public: Initializer() { std::cout

✐ ✐ ✐ “Volumen1” — 2012/1/12 — 13:52 — page 297 — #335 ✐ 10.4. Dependencia en la inicialización de variables estáticas } }; } std::cout

✐<br />

✐<br />

✐<br />

“Volum<strong>en</strong>1” — 2012/1/12 — 13:52 — page 297 — #335<br />

✐<br />

10.4. Dep<strong>en</strong>d<strong>en</strong>cia <strong>en</strong> la inicialización de variables estáticas<br />

}<br />

};<br />

}<br />

std::cout

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!