連結リストの要素を全て削除する

連結リストを自前で実装したときに、デストラクタがあると要素を全て削除するのが楽でいいですね。

#include <iostream>
using namespace std;

struct list {
  char* name;
  list* next;

  list(char* name) : name(name), next(0) {}
  ~list() {
    cout << name << endl;
    delete next;
  }
};

void main()
{
  list* node = new list("A");
  list* p = (node->next = new list("B"));
  p = (p->next = new list("C"));
  p = (p->next = new list("D"));

  delete node;
}

昔どこかで見たのを思い出したんですが、これは結構気分がいいです。