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 263 — #301<br />
✐<br />
9.3. Stash y Stack con inlines<br />
Este es el mismo programa de prueba que se usó antes, de modo que la salida<br />
debería ser básicam<strong>en</strong>te la misma.<br />
La clase Stack incluso hace mejor uso de inline’s.<br />
//: C09:Stack4.h<br />
// With inlines<br />
#ifndef STACK4_H<br />
#define STACK4_H<br />
#include "../require.h"<br />
class Stack {<br />
struct Link {<br />
void* data;<br />
Link* next;<br />
Link(void* dat, Link* nxt):<br />
data(dat), next(nxt) {}<br />
}* head;<br />
public:<br />
Stack() : head(0) {}<br />
~Stack() {<br />
require(head == 0, "Stack not empty");<br />
}<br />
void push(void* dat) {<br />
head = new Link(dat, head);<br />
}<br />
void* peek() const {<br />
return head head->data : 0;<br />
}<br />
void* pop() {<br />
if(head == 0) return 0;<br />
void* result = head->data;<br />
Link* oldHead = head;<br />
head = head->next;<br />
delete oldHead;<br />
return result;<br />
}<br />
};<br />
#<strong>en</strong>dif // STACK4_H ///:~<br />
Note que el destructor Link, que se pres<strong>en</strong>tó (vacío) <strong>en</strong> la versión anterior de<br />
Stack, ha sido eliminado. En pop(), la expresión delete oldHead simplem<strong>en</strong>te<br />
libera la memoria usada por Link (no destruye el objeto data apuntado por el Link).<br />
La mayoría de las funciones inline quedan bastante bi<strong>en</strong> obviam<strong>en</strong>te, <strong>en</strong> especial<br />
para Link. Incluso pop() parece justificado, aunque siempre que haya s<strong>en</strong>t<strong>en</strong>cias<br />
condicionales o variables locales no está claro que las inlines sean b<strong>en</strong>eficiosas. Aquí,<br />
la función es lo sufici<strong>en</strong>tem<strong>en</strong>te pequeña así que es probable que no haga ningún<br />
daño.<br />
Si todas sus funciones son inline, usar la librería se convierte <strong>en</strong> algo bastante<br />
simple porque el <strong>en</strong>lazado es innecesario, como puede ver <strong>en</strong> el ejemplo de prueba<br />
(fíjese <strong>en</strong> que no hay Stack4.cpp).<br />
263<br />
✐<br />
✐<br />
✐<br />
✐