Pensar en C++ (Volumen 1) - Grupo ARCO
Pensar en C++ (Volumen 1) - Grupo ARCO
Pensar en C++ (Volumen 1) - Grupo ARCO
You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
✐<br />
✐<br />
✐<br />
“Volum<strong>en</strong>1” — 2012/1/12 — 13:52 — page 194 — #232<br />
✐<br />
Capítulo 6. Inicialización y limpieza<br />
}///:~<br />
En el código anterior, tanto el goto como el switch pued<strong>en</strong> saltar la s<strong>en</strong>t<strong>en</strong>cia<br />
<strong>en</strong> la que se invoca un constructor. Ese objeto corresponde al ámbito incluso si no<br />
se invoca el constructor, de modo que el compilador dará un m<strong>en</strong>saje de error. Esto<br />
garantiza de nuevo que un objeto no se puede crear si no se inicializa.<br />
Todo el espacio de almac<strong>en</strong>ami<strong>en</strong>to necesario se asigna <strong>en</strong> la pila, por supuesto.<br />
Ese espacio lo faciliza el compilador movi<strong>en</strong>do el puntero de pila «hacia abajo» (dep<strong>en</strong>di<strong>en</strong>do<br />
de la máquina implica increm<strong>en</strong>tar o decrem<strong>en</strong>tar el valor del puntero de<br />
pila). Los objetos también se pued<strong>en</strong> alojar <strong>en</strong> el montículo usando new, algo que se<br />
verá <strong>en</strong> el capítulo 13. (FIXME:Ref C13)<br />
6.4. Stash con constructores y destructores<br />
Los ejemplos de los capítulos anteriores ti<strong>en</strong><strong>en</strong> funciones que ti<strong>en</strong><strong>en</strong> correspond<strong>en</strong>cia<br />
directa con constructores y destructores: initialize() y cleanup(). Éste<br />
es el fichero de cabecera de Stash, utilizando constructor y destructor:<br />
//: C06:Stash2.h<br />
// With constructors & destructors<br />
#ifndef STASH2_H<br />
#define STASH2_H<br />
class Stash {<br />
int size; // Size of each space<br />
int quantity; // Number of storage spaces<br />
int next; // Next empty space<br />
// Dynamically allocated array of bytes:<br />
unsigned char* storage;<br />
void inflate(int increase);<br />
public:<br />
Stash(int size);<br />
~Stash();<br />
int add(void* elem<strong>en</strong>t);<br />
void* fetch(int index);<br />
int count();<br />
};<br />
#<strong>en</strong>dif // STASH2_H ///:~<br />
Las únicas definiciones de métodos que han cambiado son initialize() y c-<br />
leanup(), que han sido reemplazadas con un constructor y un destructor.<br />
//: C06:Stash2.cpp {O}<br />
// Constructors & destructors<br />
#include "Stash2.h"<br />
#include "../require.h"<br />
#include <br />
#include <br />
using namespace std;<br />
const int increm<strong>en</strong>t = 100;<br />
Stash::Stash(int sz) {<br />
194<br />
✐<br />
✐<br />
✐<br />
✐