try catch 无法捕获有dynamic_cast操作产生的异常
我的目的是捕获dynamic_cast操作失败时产生的异常,但是如何配置vc中的选项才能捕获到呢。我在网上查资料,有人说,把/GX 改成 /eha 就可以了,但是经过实验,我发现改成 /eha 后可以捕获了,但是再改成/GX还能捕获到,为什么开始就捕获不到呢,是不是各个选项的顺序也有要求。
上面是我说的一个测试用的工程,有时候能捕获到,有时候不能捕获到,但是在我另外一个实际的工程中,不论怎么设置选项都不能捕获。(enable exception handling选不选都不行)
到底怎么组合各个vc选项才能捕获到异常呢?
只有60分了,不好意思啊:)
测试工程代码如下(实际工程原理和这个相同):
class TestBase
{
private:
int a;
public:
int virtual getA();
};
class TestSub : public TestBase
{
private:
int b;
public:
int getA();
};
int TestBase::getA()
{
return 4;
}
int TestSub::getA()
{
b = 1;
return b;
}
void CMainFrame::OnTest()
{
// TODO: Add your command handler code here
TestSub * subA = new TestSub;
TestSub * subB = subA;
delete subA;
try
{
TestSub * subC = dynamic_cast<TestSub *>(subB);
}
catch(...)
{
AfxMessageBox("hello");//我所说的捕获不到异常,是指这里面的代码没有执行
subB = NULL;
}
if(subB != NULL)
{
int a = subB->getA();
}
}