Listing 1
#include <iostream>
using std::cout;
struct node
{ // node for linked list
public:
node(int value) : data(value) {}
~node()
{ // destroy a node
cout << "destroying node holding " << data << '\n';
if (next)
delete next;
}
int get() const { return data; }
private:
friend struct list;
node *next;
int data;
};
struct list
{ // simple linked list
public:
list() : items(0) {}
~list()
{ // destroy nodes
delete items;
}
void insert(int value)
{ // add a value to the list
node *elt(new node(value));
elt->next = items;
items = elt;
}
void show() const
{ // show all stored values
node *elt = items;
while (elt)
{ // show a stored value
cout << elt->data << ' ';
elt = elt->next;
}
cout << '\n';
}
private:
node *items;
};
void make_a_list()
{ // make a list and destroy it
list values;
values.insert(1);
values.insert(2);
values.insert(3);
values.show();
}
int main()
{ // demonstrate manual memory management
make_a_list();
return 0;
}