不変な値クラス

8/31の日記で書いてあるように、僕は、Javaでは、なるべくポインタを不変にするように心がけていた。C++でも同じように、ほとんどすべてのポインタをconstにすることにしている。

8/31の日記では、「値」タイプのクラスの=を禁止するといことについても書いたが、これはポインタをconstにすることとは別の問題だ。しかし、別の問題なのだが、非常に有用であることは確かだ。ほとんどの値クラスのオブジェクトは、意味的に不変なことが多い。そして、意味的に不変なのであるならば、可能な限りそれをプログラムの中で表現すべきだ。

結論として、値クラスは、さらに二つに分類できるということになる。不変かそうでないか。

不変クラスには痛い点もいくつかあって、特に「ベクタに入れられなくなる」というのが痛い。また、そういうクラスは、たいていデフォルトコンストラクタがないので、配列に入れることもできなくなる。9/12の日記で書いたように、今回、僕は、特別なベクタを作ることでその問題に対処した。しかし、まだまだ理想的なベクタにはほど遠いものだ。それに、他のコンテナも一つ一つ作るのかという疑問もある。これは今後の課題だ。