【发布时间】:2009-05-12 21:02:11
【问题描述】:
我正在使用 Visual Studio 并执行有效的动态转换。 RTTI 已启用。
编辑:更新代码更真实
struct base
{
virtual base* Clone()
{
base* ptr = new base;
CopyValuesTo( ptr );
return ptr;
}
virtual void CopyValuesTo( base* ptr )
{
...
}
virtual ~base()
{
}
}
struct derived : public base
{
virtual base* Clone()
{
derived* ptr = new derived;
CopyValuesTo( ptr );
return ptr;
}
virtual void CopyValuesTo( base* ptr )
{
...
}
virtual ~derived()
{
}
}
void Class1::UseNewSpec( base* in_ptr ) //part of a totally unrelated class
{
derived* ptr = dynamic_cast<derived *>(in_ptr);
if( !ptr )
return;
delete m_ptr;
m_ptr = ptr->Clone(); //m_ptr is a member of Class1 of type base*
}
//usage :
Class1 obj;
derived new_spec;
obj.UseNewSpec( &new_spec );
我的调试器说在抛出异常时 in_ptr 是正确的类型。谷歌似乎特别没有帮助。有任何想法吗?干杯。
【问题讨论】:
-
这是一个使用场景:UseNewSpec 链接到一个 GUI 旋钮。当旋钮改变时,调用 UseNewSpec。当旋钮缓慢移动时它可以工作,但是当它移动得非常快时会抛出这个异常。
-
谢谢大家。我已经想通了。这是一个线程问题——其他地方的一些劣质代码导致指针在动态转换之前变得无效。
标签: c++ exception visual-studio-2005 rtti