189 8069 5689

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

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

成都创新互联专注为客户提供全方位的互联网综合服务,包含不限于网站制作、网站设计、康县网络推广、成都小程序开发、康县网络营销、康县企业策划、康县品牌公关、搜索引擎seo、人物专访、企业宣传片、企业代运营等,从售前售中售后,我们都将竭诚为您服务,您的肯定,是我们最大的嘉奖;成都创新互联为所有大学生创业者提供康县建站搭建服务,24小时服务热线:028-86922220,官方网址:www.cdcxhl.com

析构函数不应该失败    
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++中析构函数失败说明什么”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注创新互联网站,小编会继续努力为大家带来更多实用的文章!


分享文章:C++中析构函数失败说明什么
URL网址:http://cdxtjz.com/article/piecjg.html

其他资讯