13.01.2015 Views

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

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

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

SHOW MORE
SHOW LESS

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

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

Saved successfully!

Ooh no, something went wrong!