2008-03-10

Effective C++ 9項

9項 コンストラクタやデストラクタ内では決して仮想関数を呼び出さないようにしよう

基底クラス→派生クラスの順で生成され、派生クラス→基底クラスの順に破棄される。

基底クラス部分を生成中・破棄中には基底クラスとして扱われるため、この時点では仮想関数を呼び出しても基底クラスの関数が呼び出される事になります。
これは基底クラス部分の生成中・破棄中には派生クラス部分は不定であるためにこのような仕様になっているらしいのですが、直感的にわかりにくいですし、呼び出している仮想関数が基底クラスでは純粋仮想関数だと実行時エラーになります。

と言う事なのでコンストラクタやデストラクタ内では直接、間接を問わず仮想関数を呼び出さないようにした方がよいでしょう、と言うお話でした。

C++って難しいですね(ーー;)

以下広告

0 件のコメント: