C++相談室2

このエントリーをはてなブックマークに追加
368358じゃないよ
>>367
派生クラスによる追加部分が未構築な段階で、
基底クラスの構築子から派生クラスの仮想メソッドを呼べてしまうと、
その仮想メソッドが派生クラスの未構築なメンバをもしもアクセス
すると動作が異常になるので、言語仕様では安全サイドに振って
一律に派生クラス側のメソッドを呼べないようにしているわけだが、
コンパイラとリンカが神のごとく賢ければ、未構築なメンバを
アクセスする仮想メソッドの呼び出しに対してはエラーを、
さもなくば呼び出し可能としても良いわけで、>>358 はそれを
ダサいと言っているのであろう。
逆にプログラマ責任サイドに振って、派生クラスの仮想メソッド
を呼び出しOKにして、未構築なメンバをアクセスするような
仮想メソッドの場合は「未定義の動作」とする手もあったと思う。
C++の場合、この手の選択では「未定義の動作」とする場合が
多いのだが、そうしなかったのは仮想テーブルの設定を行う
実装が難しくなるからかな。