さまざまなクラス タイプのオブジェクトを含むアプリケーションがあります。オブジェクトはポインターによって参照されます。null ポインターは、関連付けられたオブジェクトが存在しないことを示します。現在、オブジェクトへのポインターを使用するたびに、ポインター値が null かどうかをテストし、null である適切なアクションを実行するため、呼び出しコードは面倒です。存在しない場合に実行されるデフォルトのアクションはオブジェクトのタイプに依存するため、呼び出しプログラムではなく、オブジェクト自体のクラスでエンコードすることをお勧めします。これにより、次のような構造が得られます。
class C
{ ...
void member_func() //non-virtual !
{ if (this) { do something with the object ... }
else { take some default action }
}
...
};
オブジェクトが存在しない場合はルックアップ テーブルが存在せず、仮想呼び出しが失敗するため、明らかにメンバー関数を仮想にすることはできません。しかし、このコードは非仮想メンバー関数に対して正当な C++ ですか? 私が試したコンパイラでは正しく動作しているようですが、移植性がない可能性が心配です。標準では、そのような構造を明示的に許可または明示的に禁止する条項を見つけることができません。