最初にいくつかの背景:
UI インターフェイスを実装するレガシー コードに取り組んでいます。コードは、あらゆる種類のグラフィカル オブジェクトに派生する基本クラス (実際には構造体) WinBase を持つように構造化されています。
WinBase:
- Button
- DialogWin
- (etc...)
- EditWin
WinBase には、WinBase **children
各オブジェクトのすべての子を監視するために使用されるメンバーがあります。これらの子は、実行時に標準の new[]/delete[] の方法で作成および破棄されます。
これらのオブジェクトのすべてのメソッド/関数は、WinBase
オブジェクトへのポインターを受け取っていることを前提としてdynamic_cast<>
おり、適切なポインターが使用されていることを確認/検証するために使用されます。
その後のコード変更により、さらに 2 つのクラス/構造体 (ListBox
およびTextBox
) が追加されました。EditWin
これらは から派生し、 は から派生しWinBase
ます。
WinBase
だから...私はそれがにキャストされていることListBox
へのポインタを持っていますTextBox
。私が言ったようにdynamic_cast<>
、コード全体で使用されていますが、このコンストラクターのような関数が呼び出されたときにこれがどれほど安全かはわかりません。
TextBox(WinBase *pw,(...));
(たとえば)から直接キャストしたり、その逆にキャストしたりするのはどのくらい安全WinBase
ですか?ListBox