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;
  }