2008-02-26

Effective C++ 5項

5項 C++が自動で書き、自動で呼び出す関数を知ろう

この辺りから先は組み込み系ではあまり関係ない話になりそうです

デフォルトコンストラクタ、デストラクタ、コピーコンストラクタ、コピー代入演算子を宣言しなければコンパイラが必要なときに自動生成することになっているそうです。
  • Foo f1;
    デフォルトコンストラクタ、デストラクタが必要になる
  • Foo f2(f1);
    コピーコンストラクタが必要になる
  • f2 = f1;
    コピー代入演算子が必要になる

とのこと。

関数の引数で値渡しをするときや返値として値を返すときにはコピーコンストラクタが呼び出される
当然ですがこうやって生成されたオブジェクトは引数の場合は関数を抜けた時に、返値の場合は関数を呼び出したステップを抜けた時点で破棄されるのでデストラクタが呼び出される

例えばデストラクタで内部でポインタとして保持しているオブジェクトを delete したりしていたら…
デフォルトのコピーコンストラクタとコピー代入演算子はビットレベルのコピーなのでよくよく考えて作る必要がありそうです。

とは言っても、私がやっているのは組み込みなので「値渡しは極力行わない」です。多分。

0 件のコメント: