C ++ - 抛出和捕获异常的正确方法

时间:2011-04-03 15:54:25

标签: c++ exception exception-handling memory-leaks

  

可能重复:
  throwing exceptions of objects on the stack, mem leak with new?

您是否在C ++ 中使用而不是 new运算符中抛出异常?因为这两个都会引发异常。

void KillUnicorns()
{
    throw IllegalActionException();
}

int main()
{
    try
    {
        KillUnicorns();
    }
    catch (IllegalActionException e)
    {
         // Handle exception
    }
    return 0;
}

虽然以下示例会泄漏内存?

void KillUnicorns()
{
    throw new IllegalActionException();
}

int main()
{
    try
    {
        KillUnicorns();
    }
    catch (IllegalActionException* e)
    {
         // Handle exception
    }
    return 0;
}

在C ++中抛出异常的正确方法是什么?

2 个答案:

答案 0 :(得分:9)

我会在不使用new的情况下抛出异常:

void KillUnicorns()
{
    throw IllegalActionException();
}

catch将其const引用为:

catch (const IllegalActionException & e)
{   // ^^^^ note const             ^^ note reference!

}

避免复制。它避免使用new,因此可以避免使用delete

答案 1 :(得分:8)

从技术上讲,你可以做到这两点。

但投掷物体更传统:
另请注意const引用的引用(这可以防止异常的切片)

try
{
    KillUnicorns();
}
catch (IllegalActionException const& e)
{                         // ^^^^^^^^
     // Handle exception
}
相关问题