为什么我们需要RAII来解决异常安全问题

-2 c++ exception raii c++11

unique_ptr<X> f()
{
    unique_ptr<X> p(new X);     // or {new X} but not = new X
    // do something - maybe throw an exception
    return p;   // the ownership is transferred out of f()
}
Run Code Online (Sandbox Code Playgroud)

当异常抛出时,为什么我们关心对象X的存在,为什么我们关心它占用的内存呢?

处理异常后,该过程将很快终止,内存将被释放,为什么我们关心这个?

Ant*_*ony 6

因为在大多数应用程序中,进程不会立即终止,并且您不希望泄漏内存.你也可以问为什么你应该关心内存泄漏.

  • @upton,可以通过允许程序在之后运行很长时间的方式处理一些异常.如果您的程序在异常后立即停止,那么您可以自由地忽略传统建议 - 但只希望继承您代码的人不是psycopaths. (4认同)

Nic*_*las 6

处理异常后,该过程将很快终止

谁说的?

如果您在异常情况下所做的一切都会终止,那么是的,您可以忽略它.但是,你应该抓住很多例外.在特殊情况下使代码相对防弹并不是件坏事.

一旦你决定真正开始尝试捕捉异常而不是忽略它们,你需要RAII.