可能重复:
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 ++中抛出异常的正确方法是什么?
答案 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
}