这篇文章主要介绍“C++中为什么直接拥有一个对象所有权时永远不要抛出异常”,在日常操作中,相信很多人在C++中为什么直接拥有一个对象所有权时永远不要抛出异常问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C++中为什么直接拥有一个对象所有权时永远不要抛出异常”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!
Reason(原因)
That would be a leak.
那样做会发生泄露。
Example(示例)
void leak(int x) // don't: may leak{ auto p = new int{7}; if (x < 0) throw Get_me_out_of_here{}; // may leak *p // ... delete p; // we may never get here}
One way of avoiding such problems is to use resource handles consistently:
避免这种问题的一种方法是始终如一地使用资源句柄。
void no_leak(int x){ auto p = make_unique<int>(7); if (x < 0) throw Get_me_out_of_here{}; // will delete *p if necessary // ... // no need for delete p}
Another solution (often better) would be to use a local variable to eliminate explicit use of pointers:
另外一个解决方案(通常更好)是用局部变量来避免使用指针。
void no_leak_simplified(int x){ vector<int> v(7); // ...}
Note(注意)
If you have local "things" that requires cleanup, but is not represented by an object with a destructor, such cleanup must also be done before a throw. Sometimes, finally() can make such unsystematic cleanup a bit more manageable.
如果局部的“某物”需要清除,但却没有实现为一个具有析构函数的对象,这些清理操作也必须在抛出异常之前进行。有时,finally函数可以让这种非系统化的清理动作稍微容易管理一些。
到此,关于“C++中为什么直接拥有一个对象所有权时永远不要抛出异常”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注亿速云网站,小编会继续努力为大家带来更多实用的文章!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。