たかつです。

C++使いの意見ですが、

記事 <1173408799.067953.89530@30g2000cwc.googlegroups.com> で
        "pegacorn"さんは書きました

> コンストラクタからインスタンスメソッドを呼び出す場合には下記のような
> 注意が必要ですが、そもそもそんな注意が必要な仕様にしてまで呼び出せる
> ようにする必要があるのでしょうか?
> 単純に呼び出せないようにすれば良いのではないでしょうか?

引数の異なる複数のコンストラクタがある場合に、それぞれのコンストラクタに
いちいち初期化コードを記述するのは無駄が多いし保守性が悪くなるので、

共通の初期化ルーチンはメソッドとして用意して、それぞれのコンストラクタから
呼び出す、ということはよくやってます。
例えば、メンバ変数が増えたりした時に、全てのコンストラクタにそのメンバの
初期化コードを書くのは手間がかかりますし、ヘタすると初期化ミスの元ですし。

あまり良い例かわかりませんが、

class array {
    int *p;
    int s;
    init() { p = NULL; s = 0; }
    destroy() { delete [] p; }
    alloc(int size) { destroy(); p = new int[s = size];}
    copy(const aclass &src) { alloc(src.s); memcpy(p, src.p, sizeof(*p)*s);}
public:
    array() {init();}
    array(int size) {init(); alloc(size);}
    array(const array &src) {init(); copy(src);}
    ~array() { destroy(); }
    array &operator=(const array &src) { copy(src); return *this;}
};

みたいな感じ。それぞれの機能を書き下すより効率は悪くなってますが、
それよりも保守性重視ってことで。


PROJECT TEAM DoGA 高津正道                            taka2@doga.jp
                     PROJECT TEAM DoGAのホームページ → http://doga.jp/
3月9日(金) 今日のマーフィーの法則     [収支力学の第1法則]
思いがけない収入があると、思いがけない同額の支出がある。