根拠のないインターフェースの実装はやめよう。

More Effective C++―最新35のプログラミング技法 (ASCII Addison Wesley Programming Series)を読んでてふと、自分のソースを見たらめちゃめちゃ汚いと思った...orz
例えば使う予定も無いのにlattice_systemなどに

  • operator=
  • swap
  • デフォルトコンストラク

などを実装していた。
例えばlattice_system_viewでは

class lattice_system_view
{
  public:
    lattice_system_view() :sys_(0) {}
  private:
    lattice_system* sys_;
};

みたいなコードを実装していたけど、sys_がNULLに初期化されなきゃならない場合なんてない。しかも一つ一つのメンバ関数でNULLチェックが必要になる。*1
こういうのはデフォルトコンストラクタを無くして、さらにポインタじゃなく参照を使えば安全になる。

class lattice_system_view
{
  public:
    lattice_system_view(const lattice_system& sys) :sys_(sys) {}
  private:
    lattice_system& sys_;
};

operator=だって一度構築したコンテナを破棄して上書きするような使い方は普通しないしいらない。
もう遅いから、明日書き直そう。良い勉強になったな。

*1:その上、自分のコードではNULLチェックすらしていなかったorz