« AO Diaryさんを見て | Main | 再帰判定 »

2007.08.06

年を取るとC++が難しい

今日一つ成長した。
組み込みプログラマはmallocを使わない。というかmallocが存在しない環境でプログラミングをすることが多い。そうすると、自然にmallocを避けるようにプログラミングしてしまう。同じようにC++でも、newやらdeleteやら使わずに済むなら使いたくない。

と思っていたら間違いに気がついた。

あるインスタンスAの領域が既に確保されているとする。途中でAはもう必要なくて、同じクラス(構造体)の別インスタンスBが必要になったとする。無意識に「Aの領域がもう要らないんだから、Bで上書きして使い回せば良いよね」ってコーディングをしていた。上書きの時に気をつけないと行けないこと事がいくつかあるから、上書きの時にはその関数を必ず呼ぼう。その関数でAが無効になるときの処理を書いて、Bを確実に初期化しよう。バグは出るかもしれないが、少なくともここでメモリリークは起きない。ずっと決まったところを使い回しているんだから。

完全に組み込みプログラマの職業病だ。

この発想がC++のデストラクタ、コンストラクタを台無しにしていることにようやく気がついた。オブジェクト指向なら、Aが必要なくなって新たにBが必要になったら、Aのデストラクタを呼んで、Bのコンストラクタを呼ばないといけない。クラス≠構造体だ。今C++のプロジェクトに放り込まれたら、間違いなくThe 老害になる。

一気にいろいろやると収拾つかなくなりそうだから、変更すべき所はnew、deleteに変更して、ポインターをメンバーに持つクラスはコピー禁止にしよう。仕事ならともかく、趣味のプログラミングで面倒だぜって思ったら10分で修正終了。カプセル化と単体テスト万歳!!!

一応effective C++ 2回目読み切ったけど、もう一回読まないといけないな・・・。

|

« AO Diaryさんを見て | Main | 再帰判定 »

Comments

Post a comment



(Not displayed with comment.)




TrackBack

TrackBack URL for this entry:
http://app.cocolog-nifty.com/t/trackback/18154/16022263

Listed below are links to weblogs that reference 年を取るとC++が難しい :

« AO Diaryさんを見て | Main | 再帰判定 »