C++二冊目

定番を読み終わった。

C++は難しい。自分の周りの達人プログラマが避けている理由がわかる(彼は、オブジェクトの値渡し・参照渡しを一切使わず、すべてポインタ渡しをしている)。

結局、彼の通り、オブジェクトはポインタ渡しに限定するのが良いのかも。あと、最近知ったのだが、追加ライブラリで「スマートポインタ」というものがあるらしい。ポインタがスコープから外れたら、メモリを回収するというすぐれもの。これを使ったらほとんどJavaC#と同じになりそうだ。

次は、ポインタの生存範囲について、C++特有のものがあるのか研究してみようと思う。ちなみに、Javaプログラマでも、nullポインタをフラグに使っている人が多いようだが、実はこれはCからの習慣らしい。(と、「アジャイルソフトウェア開発の奥義」に書いてあった。関係ないが、僕の知り合いのCの熟練者は、この本に書いてあったのと全く同じ言い訳をしていた。「Cでこうだったからこうだ。」)。

1990年代に、オブジェクト指向の意義が変わったと良く言われる。それまでは、オブジェクト指向は、差分プログラミングを可能にする再利用のための秘密兵器と考えられていたようだ。実際、1990年くらいに書かれた「ソフトウェア再利用の神話」でもそのような扱いだ(この本は個人的にあまりおもしろくなかったので、最後まで読めなかった。。。)。

そう考えると、C++の中途半端さ(特に継承周り)も納得がいく。C++には、インタフェースは継承したくないけれど、実装だけ継承したいというときのための、private継承というのがある。これ、意味的に継承じゃないでしょ。

ソフトウェア再利用の神話―ソフトウェア再利用の制度化に向けて (Professional Computing Series)

ソフトウェア再利用の神話―ソフトウェア再利用の制度化に向けて (Professional Computing Series)