【发布时间】:2009-12-09 23:09:05
【问题描述】:
第一季度。为什么将 NULL 指针与 static_cast 一起使用会导致崩溃,而 dynamic_cast 和 reinterpret_cast 会返回 NULL 指针?
问题出现在类似于下面给出的方法中:
void A::SetEntity(B* pEntity, int iMyEntityType)
{
switch (iMyEntityType)
{
case ENTITY1:
{
Set1(static_cast<C*>(pEntity));
return;
}
case ENTITY2:
{
Set2(static_cast<D*>(pEntity));
return;
}
case ENTITY3:
{
Set3(static_cast<E*>(pEntity));
return;
}
}
}
Inheritance:
class X: public B
class Y: public B
class Z: public B
class C: public X, public M
class D: public Y, public M
class E: public Z, public M
第二季度。从 B 到 C/D/E 的 static_casting 是否有效? (这工作正常,直到输入变为 NULL)
我使用的是 gcc 版本 3.4.3
【问题讨论】:
-
你有演示问题的sn-p吗?
-
发布了一些示例代码。
-
考虑使用
dynamic_cast而不是自己使用 switch 语句。 -
或者最好在基类中使用虚函数。