一些背景优先:多级继承和dynamic_cast
我正在研究一些实现UI接口的遗留代码。代码的构造方式是它有一个基类(实际上是一个结构体),然后将其导出到各种图形对象。
WinBase:
- Button
- DialogWin
- (etc...)
- EditWin
胜基具有用来密切关注所有每个对象的孩子中的一员WinBase **children
。这些孩子在运行期间以标准的new []/delete []方式创建和销毁。
这些对象的所有方法/函数都假定它们正在接收指向WinBase
对象的指针,并且dynamic_cast<>
用于确保/验证是否正在使用适当的指针。
稍后改变到代码增加了两个类/结构(ListBox
和TextBox
)时,从EditWin
而这又是从WinBase
衍生而得。
所以...我有指向WinBase
,它被铸造为ListBox
和TextBox
。正如我所说,在整个代码中都使用了dynamic_cast<>
,但我不确定在调用像这个构造函数这样的函数时它有多安全。
如何安全是直接从WinBase
转换为ListBox
,反之亦然(例如)?
以什么方式安全?如果运行时类型不允许转换,dynamic_cast <>'将评估为NULL指针。只要你检查结果是非空的,你就很安全。如果这不是问题,那么您确实需要提供更多细节,以及您特别困惑的代码(以及以何种方式)。 – pmdj 2012-07-13 11:45:58
而不是返回0,如果我没有弄错,它会抛出一个'std :: bad_cast'异常。 – jogojapan 2012-07-13 11:48:22
@jogojapan如果使用指针,总是返回0。 – ForEveR 2012-07-13 11:49:24