Kev*_*vin 8 c++ memory-leaks exception-handling exception
可能重复:
在堆栈上抛出对象的异常,用新的mem泄漏?
在有或没有new运算符的情况下,您是否在C++中抛出异常?因为这两个都会引发异常.
void KillUnicorns()
{
throw IllegalActionException();
}
int main()
{
try
{
KillUnicorns();
}
catch (IllegalActionException e)
{
// Handle exception
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
虽然以下示例会泄漏内存?
void KillUnicorns()
{
throw new IllegalActionException();
}
int main()
{
try
{
KillUnicorns();
}
catch (IllegalActionException* e)
{
// Handle exception
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
在C++中抛出异常的正确方法是什么?
我会抛出异常而不使用new:
void KillUnicorns()
{
throw IllegalActionException();
}
Run Code Online (Sandbox Code Playgroud)
catch它会const参考,如:
catch (const IllegalActionException & e)
{ // ^^^^ note const ^^ note reference!
}
Run Code Online (Sandbox Code Playgroud)
它避免了复制.它避免了new,因此可以避免使用delete.
从技术上讲,你可以做到.
但抛出对象更传统:
还要注意通过const引用捕获(这可以防止切片异常)
try
{
KillUnicorns();
}
catch (IllegalActionException const& e)
{ // ^^^^^^^^
// Handle exception
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8687 次 |
| 最近记录: |