C++中为什么直接拥有一个对象所有权时永远不要抛出异常

这篇文章主要介绍“C++中为什么直接拥有一个对象所有权时永远不要抛出异常”,在日常操作中,相信很多人在C++中为什么直接拥有一个对象所有权时永远不要抛出异常问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C++中为什么直接拥有一个对象所有权时永远不要抛出异常”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

创新互联坚持“要么做到,要么别承诺”的工作理念,服务领域包括:成都网站制作、做网站、企业官网、英文网站、手机端网站、网站推广等服务,满足客户于互联网时代的绥芬河网站设计、移动媒体设计的需求,帮助企业找到有效的互联网解决方案。努力成为您成熟可靠的网络建设合作伙伴!

E.13: 直接拥有一个对象所有权时永远不要抛出异常

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(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 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++中为什么直接拥有一个对象所有权时永远不要抛出异常”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注创新互联网站,小编会继续努力为大家带来更多实用的文章!


新闻名称:C++中为什么直接拥有一个对象所有权时永远不要抛出异常
URL标题:http://ybzwz.com/article/pcdcee.html