先说一些背景:
我正在研究一些实现 UI 界面的遗留代码。代码的结构方式是它有一个基类(实际上它是一个结构)WinBase,然后将其派生到各种图形对象。
WinBase:
- Button
- DialogWin
- (etc...)
- EditWin
WinBase 有一个成员WinBase **children
,用于在每个对象的所有子项上保持制表符。这些孩子在运行时以标准的 new[]/delete[] 方式创建和销毁。
这些对象的所有方法/函数都假定它们正在接收指向WinBase
对象的指针,并dynamic_cast<>
用于确保/验证正在使用适当的指针。
稍后对代码的更改添加了另外两个类/结构(ListBox
和TextBox
),它们派生自EditWin
它们,而它们又派生自WinBase
.
所以...我有指针WinBase
指向ListBox
和TextBox
. 正如我所说,dynamic_cast<>
在整个代码中都使用了,但我不确定当调用像这个构造函数这样的函数时它有多安全。
TextBox(WinBase *pw,(...));
直接从WinBase
to 转换ListBox
和反之亦然(例如)有多安全?