BREW Smart Pointer

Joel on Software を見習って、ちょっとシナリオを。


ジョンは毎日頭を痛めていた。
彼は昔、JavaWindows のアプリケーションを開発していた。オブジェクト指向、多義性、ポリモーフィズムデザインパターンを理解し、それらを効率よく使用してプログラムを書いていた。優秀なプログラマだった。
しかしそんな彼に不幸が訪れる。確かに彼のプログラムは優秀だったが、その会社は違っていた。いくつもの競争相手に敗れ、そして彼は会社から離れざるを得なくなった。
今や彼は携帯用アプリケーションを開発しているプログラマだ。彼はこの会社でも優秀なプログラマであろうとした。しかし、この携帯アプリを開発するために使用出来る言語は C++ しかない。彼はこれまで Java 以外にはほとんど扱ったことが無く、ポインタという概念についての知識は皆無に等しかった。
彼は毎日頭を捻り、時にはピカソが見たら感動で涙を流しそうな絵を紙に書き、時にはその概念を理解するために何冊もの本を買った。彼は努力家だった。ポインタを理解するために、時と金という大きな財産を支払った。
そして遂に彼は理解した。
「ああそうか。C++ は new をしたら delete をしなくてはならないのだ」
その通りだ。しかし彼にはこれが不満だった。この制約のおかげで、Java で実装出来ていた様々なことが出来なくなっていたのだ。
それに、delete をし忘れると危険だと言われても、忘れるものは忘れる。こんな危険なのは言語側で対応して欲しいというのが彼の本音だ。
そう、彼はポインタを理解はしたが、結局何も解決していない。
彼は毎日頭を痛めていた。


ある日彼は本を読んでいた。More Effective C++ だ。この本に、参照カウント式のスマートポインタについての記述があった。これだ!
彼はそれからスマートポインタについて研究した。ある日はテンプレートの使い方に目を回し、ある日はスマートポインタでの継承で頭を捻り、ある日は new, delete 以外でオブジェクト削除をする方法が思いつかず拳銃で頭をぶち抜きそうになった。そして遂に彼はスマートポインタを完成させた。やった!
彼は狂喜乱舞した。循環参照にさえ気を付ければ、Java で出来ていたことは何でも出来た。素晴らしい。
彼は全てのポインタをスマートポインタに変更し、それを使用した。


しかし彼はまた頭を痛めることになる。(つづく)