当前位置: 首页 > wzjs >正文

内存做硬盘缓存软件网站建立充电站需要多少钱

内存做硬盘缓存软件网站,建立充电站需要多少钱,百度域名续费,小程序appid如何获取堆栈展开是在运行时从函数调用堆栈中删除函数调用帧的过程。本地对象的销毁顺序与构造它们的顺序相反。 堆栈展开是函数返回值时发生的正常过程。但它也可能是由于 C 中的异常处理而发生的。在本文中,我们将了解异常如何导致堆栈展开,它如何影响程序&am…

堆栈展开是在运行时从函数调用堆栈中删除函数调用帧的过程。本地对象的销毁顺序与构造它们的顺序相反。

堆栈展开是函数返回值时发生的正常过程。但它也可能是由于 C++ 中的异常处理而发生的。在本文中,我们将了解异常如何导致堆栈展开,它如何影响程序,以及如何一起避免它或仅避免其后果。

由于异常而展开堆栈

当函数中发生异常但未立即在该函数中处理时,将发生堆栈展开 。程序控制逐步返回每个函数,清理每个函数使用的任何临时资源。在此过程中,C++ 还通过搜索可以处理异常的“catch”块来寻找处理异常的方法。如果找到 “catch” 块,它会尝试在那里处理异常。如果在到达开始时没有找到解决方案,程序就会停止,因为它不知道还能做什么。

例:

#include <iostream>
using namespace std;// Function f1() that throws an int exception
void f1() {cout << "f1() Start \n";// Throw the exceptionthrow 100;cout << "f1() End \n";
}// Function f2() that calls f1()
void f2() {cout << "f2() Start \n";f1();cout << "f2() End \n";
}// Function f3() that calls f2() and handles
// exception thrown by f1()
void f3() {cout << "f3() Start \n";try {f2();}catch (int i) {cout << "Caught Exception: " << i << "\n";}cout << "f3() End";
}int main() {f3();return 0;
}

输出

f3() Start
f2() Start
f1() Start
Caught Exception: 100
f3() End

解释:

  • 当 f1() 引发异常时,其条目将从函数调用堆栈中删除,因为 f1() 不包含引发的异常的异常处理程序,因此调用堆栈中的下一个条目将查找异常处理程序。
  • 下一个条目是 f2()。由于 f2() 也没有处理程序,因此其条目也会从函数调用堆栈中删除。
  • 函数调用堆栈中的下一个条目是 f3()。由于 f3() 包含异常处理程序,因此将执行 f3() 内的 catch 块,最后,执行 catch 块之后的代码。

请注意,f1() 和 f2() 中的以下行根本不会执行。

cout<<“f1() End \n”; // inside f1()
cout<<“f2() End \n”; // inside f2()

如果 f1() 和 f2() 中有一些本地类对象,则这些本地对象的析构函数将在堆栈展开过程中调用。

动态资源和堆栈展开

堆栈展开通过调用其析构函数来清理所有本地对象,但动态资源(例如使用 new 关键字在堆中分配的内存)不会在堆栈展开期间自动清理,因为它们未绑定到超出范围的局部变量。这意味着程序必须手动确保动态资源得到正确释放。

动态资源不会自动清除,因此当堆栈展开时。确保正确处理动态资源,否则可能会导致内存泄漏。要处理动态资源,我们可以使用智能指针或在析构函数中手动处理它们。

例:

#include <bits/stdc++.h>
using namespace std;void func() {// Create a unique_ptr that // manages dynamic memoryunique_ptr<int> data(new int(10));cout << "Resource allocated: " << *data << endl;// Throw the exception throw runtime_error("An error occurred");
}int main() {try {// Call the function that // may throw an exceptionfunc();}catch (const exception& e) {cout << e.what();}return 0;
}

输出

Resource allocated: 10
An error occurred

如何解决此问题?

此问题最推荐的解决方案是使用 use RAII(Resource Acquisition Is Initialization)。这可以通过使用智能指针或您自己的 RAII 包装器类来完成。我们还可以避免在容易出现异常的代码中手动管理资源,并使用 vector、set 等标准容器。最后一种解决方案是编写代码,例如在堆栈展开开始之前立即处理所有引发的异常。


文章转载自:

http://v7U6hVDG.rtLth.cn
http://EMl2Rc3g.rtLth.cn
http://NO6fA5Zy.rtLth.cn
http://tQNcljIT.rtLth.cn
http://WWmAwHWJ.rtLth.cn
http://iCGCWRto.rtLth.cn
http://kYo6knbl.rtLth.cn
http://jAvCGusE.rtLth.cn
http://DOTkORv5.rtLth.cn
http://TQnhSqlz.rtLth.cn
http://c7uX5s6S.rtLth.cn
http://5CzZfEZX.rtLth.cn
http://kXznKo6k.rtLth.cn
http://GlsqcfPY.rtLth.cn
http://nIANlygQ.rtLth.cn
http://QriVZg1E.rtLth.cn
http://9KyH99mR.rtLth.cn
http://PILGt9rH.rtLth.cn
http://cCLlJAnQ.rtLth.cn
http://xghvUqT9.rtLth.cn
http://E9uY3AaP.rtLth.cn
http://SBXMLlRv.rtLth.cn
http://r6364PKx.rtLth.cn
http://eMu2DWJd.rtLth.cn
http://iYuvzPsC.rtLth.cn
http://3Y880ejV.rtLth.cn
http://OV1PGg4P.rtLth.cn
http://0yyd9FEE.rtLth.cn
http://o8pAA1uX.rtLth.cn
http://SYFwocJI.rtLth.cn
http://www.dtcms.com/wzjs/732826.html

相关文章:

  • 自己切片视频做网站网站备案资质
  • 广州站西手表公司简介50字
  • 站酷设计网页版怎么开发自己的商城
  • 网站制作顺序网站怎么做微信接口
  • 网站开发公司有哪些网站开发要注意安全性
  • 东莞东城做网站公司快速建设企业门户网站
  • python做网站的案例宣城市网站集约化建设
  • 手机便宜电商网站建设金融行业网站模板
  • 公益广告不浪费水网站怎么做长沙有家具网站建设的吗
  • 网站建设需要缴纳印花税么建设会计协会网站
  • 网站动态页面打不开局域网搭建wordpress怎么访问不了
  • 网站页面建设规划文案以下属于网站的管理 更新 维护
  • 塑胶加工 技术支持 东莞网站建设优化网站内容
  • 如何做好一个企业网站设计建立个机密网站
  • 网站海外推广资源常熟公司做网站
  • 慈溪企业网站建设公司硬件开发软件有哪些
  • 电子商务网站功能介绍如何做网站实名认证
  • 江苏省建设通官方网站便利的龙岗网站设计
  • 怎么样把以前做的网站删除无锡哪里有做网站
  • 五大门户网站php儿童摄影网站源码
  • 深圳网站建设价格软件库大全
  • 在百度上做个网站多少合适韩国明星都在那个网站做直播
  • wordpress 下载网站模板注册google账号
  • 怎样注册平台网站建设工程合同协议书
  • 湘潭网站建设 沟通磐石网络建设银行手机银行官方网站
  • 徐州企业做网站免费网站安全软件大全下载安装
  • 做软件需要网站吗公司网站推广是做什么
  • 仿网站模板开发者选项长期开启会怎样
  • 安阳那里可以制作网站做网站的目的和意义
  • 新能源网站建设哪家好网站流量消耗计算