Pensar en C++ (Volumen 1) - Grupo ARCO
Pensar en C++ (Volumen 1) - Grupo ARCO
Pensar en C++ (Volumen 1) - Grupo ARCO
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
✐<br />
✐<br />
✐<br />
“Volum<strong>en</strong>1” — 2012/1/12 — 13:52 — page 278 — #316<br />
✐<br />
Capítulo 10. Control de nombres<br />
Es posible especificar acciones que se llev<strong>en</strong> a cabo tras finalizar la ejecución de<br />
main() (o llamando a exit()) utilizando la función de librería estándar de C atexit().<br />
En este caso, las funciones registradas <strong>en</strong> atexit() serán invocadas antes<br />
de los destructores para cualquier objeto construido antes de abandonar main() (o<br />
de llamar a exit()).<br />
Como la destrucción ordinaria, la destrucción de objetos estáticos se lleva a cabo<br />
<strong>en</strong> ord<strong>en</strong> inverso al de la inicialización. Hay que t<strong>en</strong>er <strong>en</strong> cu<strong>en</strong>ta que sólo los objetos<br />
que han sido construidos serán destruidos. Afortunadam<strong>en</strong>te, las herrami<strong>en</strong>tas de<br />
desarrollo de <strong>C++</strong> manti<strong>en</strong><strong>en</strong> un registro del ord<strong>en</strong> de inicialización y de los objetos<br />
que han sido construidos. Los objetos globales siempre se construy<strong>en</strong> antes de <strong>en</strong>trar<br />
<strong>en</strong> main() y se destruy<strong>en</strong> una vez se sale, pero si existe una función que conti<strong>en</strong>e<br />
un objeto local estático a la que nunca se llama, el constructor de dicho objeto nunca<br />
fue ejecutado y, por tanto, nunca se invocará su destructor. Por ejemplo:<br />
//: C10:StaticDestructors.cpp<br />
// Static object destructors<br />
#include <br />
using namespace std;<br />
ofstream out("statdest.out"); // Trace file<br />
class Obj {<br />
char c; // Id<strong>en</strong>tifier<br />
public:<br />
Obj(char cc) : c(cc) {<br />
out