温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

C++中析构函数失败说明什么

发布时间:2021-11-29 13:58:04 来源:亿速云 阅读:183 作者:iii 栏目:大数据

这篇文章主要介绍“C++中析构函数失败说明什么”,在日常操作中,相信很多人在C++中析构函数失败说明什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C++中析构函数失败说明什么”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

析构函数不应该失败    
Reason(原因)

如果析构函数会失败,通常我们也不知道怎么写出没有错误的代码。标准库要求它处理所有的类的析构函数都不要抛出异常。

Example(示例)

class X {      
     

public:

   ~X() noexcept;

   // ...

};


X::~X() noexcept {

   // ...

   if (cannot_release_a_resource) terminate();

   // ...

}

Note(注意)

为了发明处理析构函数中的错误的可靠方法,人们已经进行了各种尝试。没有任何一种方法发展成通用的做法。这是一个真正的实践性问题:例如,socket不能关闭时怎么办?析构函数的编写者不知道析构函数因为什么被调用,而且不能通过抛出异常来拒绝这个动作。更为严重的是,很多“关闭/释放"操作是不可重试的。如果可能的话,将关闭/释放时发生的错误当作基本的设计错误并终止执行。 

Note(注意)

将析构函数定义为noexcept。这将保证要么正常结束析构,要么终止程序。

Note(注意)    

如果资源不能被释放而且程序有可能不失败,以某种方式(甚至可以是修改某些全局变量并寄希望于某些程序会注意并处理该问题)向程序的其他部分发出错误信号。需要充分意识到这个技术的特殊目的,而且容易发生错误。考虑示例“我的链接不会关闭"。有可能在连接的另一端存在问题,而且对于链接的两端来说,只存在一段代码负有正确地处理这个问题的责任。析构函数可以(以某种方式)向系统中负责处理错误的部分发送一条消息,同时认为我们已经关闭了链接并正确的返回了。

Note(注意)

如果析构函数使用了可能失败的操作,它可以自己捕捉异常并且在有些情况下依然成功地结束(例如使用抛出异常之外的不同的清除机制)。

Enforcement(实施建议)

(简单)如果可能抛出异常,那么析构函数应该声明为noexcept。  

译者注:声明noexcept,编译器就不会生成异常的传递机制,这时一旦抛出异常,程序会直接中止。    

到此,关于“C++中析构函数失败说明什么”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注亿速云网站,小编会继续努力为大家带来更多实用的文章!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

c++
AI