还是delete提问,顺便谢谢ubin
ubin给了我一个回复:
你的帖子中有如下提问,好像没人理会:
“我以为,delete []ap,就会把只要是ap指针new出来都东西一起消了。
那如果没错都话,谁能给我解释一下吗?我不明白它new出来都东西,用delete[]ap是怎样知道哪些是由ap指针new出来的呢?他们是怎么存储的呢?ap都指向是什么?”
如果是 delete ap; 的话编译器在解释这一句时,它很清楚两件事:其一、ap这个指针的类型,即它所指向类对象的大小;其二、ap这个指针的值,即它所指向类对象的首地址。
那么知道了内存的首址和大小,释放这个内存块也就不是什么难事了。你要纠正一个误解,调用一次delete只能释放一个对象!如果反复new的话,就需要反复delete,这是一一对应的关系,不可能在一次delete中释放以前所有new出来的对象,用delete[]也不行!变量ap只能存放一个对象的首地址,对它第二次赋值时,以前的值就丢失了!
delete[] 与 new[] 对应,其实你需要奇怪的是,在释放对象数组时同样也只是知道首对象的首地址,它是怎么推断出数组大小的!!!
但我还有疑问想确定一下:
因为“变量ap只能存放一个对象的首地址,对它第二次赋值时,以前的值就丢失了!”
那我若是这么写:
class A{};
list<A *>::alist;
A *ap;
ap=new A;
alist.push(ap);
ap=new A;
alist.push(ap);
//然后若此处我list<A*>::iterator it=alist.begin();去用我这个alist里的东西的话,是不是根本都没法用啊?
若是如此的话,我是不是只有每次New的时候,要写成ap=new A[++i];这样才能保证我使得重复用这个指针去new而又能存到list里去用?
最后再
for(int x=1;x<=i;x++)
{delete ap[x];alist.clear();}或者for(list<A *>::iterator it=alist.begin();it!=alist.end();++it){delete (*it);}
那这样行吗?
相关推荐
毕业设计含文档和代码VB商品配送中心库存仿真软件设计(源代码+论文)
毕业设计含文档和代码VB商品配送中心库存仿真软件设计(源代码+论文)
硕士复现燃料电池供氢系统建模及控制策略Simulink仿真(附带说明PPT+参考文献+复现模型+实物源码)
内容概要:本文围绕“【硕士复现】燃料电池供氢系统建模及控制策略Simulink仿真”这一科研资源包,系统介绍了燃料电池供氢系统的完整建模与控制策略仿真方案。资源包涵盖Simulink仿真模型、说明PPT、参考文献、复现模型及实物源码,重点实现了供氢系统的动态建模、压力与流量控制、氢气供给稳定性优化等核心功能,并采用先进的控制算法(如PID、MPC等)进行策略设计与验证。该资源注重理论与实践结合,完整呈现从系统建模、控制器设计到仿真调试的全流程,适用于新能源、氢能利用、电力电子与自动控制等领域的科研与工程应用。; 适合人群:具备一定MATLAB/Simulink操作基础,从事新能源、氢能技术、电力电子、自动化控制等方向的硕士研究生、科研人员及工程技术人员。; 使用场景及目标:①用于燃料电池供氢系统的教学演示与课程设计;②支撑科研项目中的系统建模与控制算法验证;③辅助毕业论文或学术论文的仿真部分复现与优化。; 阅读建议:建议使用者先阅读配套PPT和参考文献以建立理论基础,再结合Simulink模型逐步调试与修改参数,深入理解控制策略的设计思路与实现细节,鼓励在此基础上进行创新性改进与拓展研究。
科技中介服务机构如何通过平台提升服务效率与专业度?.docx
科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。
工博会资料工博会资料工博会资料122
工博会资料工博会资料工博会资料122
高校技术转移办公室人员如何提升成果转化项目的匹配效率?.docx
科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。


