lstd.net
当前位置:首页 >> C++ nEw 和DElEtE的问题 >>

C++ nEw 和DElEtE的问题

new分配的内存空间不会自动回收, 必须手动用delete来释放, 所以B是错误的, 记住new和delete是成对出现的, 还有就是malloc和free也是

A1. new和delete一般要成对使用.new开辟内存,delete删除内存.A2.如果使用了new不delete程序会怎么样?这个要看你的程序.反正你要知道,new的内存如果不delete,该程序结束之前,这个内存不会释放掉.也就是说如果你的程序中常常new一些内存而不delete,你的程序占用的内存会不断增大.但是有一些全局数据,可以new了不delete,在程序开始运行时,创建这些数据,程序运行过程中使用这些数据,直到程序结束.A3.写法错误. 如果new一个数组,必须使用delete[]符号.A4.现代操作系统,程序结束后,会收回这个程序所占用的内存,也就是该程序占用的内存会全部得到释放.

你想弄懂这个问题,首先你要弄清楚数据的3种存储方式. 1.静态区: 全局变量. 2.堆: 程序执行是分配的内存 3.栈: 函数调用,局部变量. new出来的内存就是分配到堆上的.程序执行完以后,堆上分配的内存不会被操作系统自动回收

new/delete究竟做了些什么? 在理解这个问题之前,我们先看一下下面的这段程序,有这么一个程序段: class A { public: A() { cout<<"A is here!"<<endl; } ~A(){ cout<<"A is dead!"<<endl; } private: int i; }; A* pA=new A; delete pA; 在这个简

我燥!有机会学不好好学,就MD来这里请教?A肯定是对的,delete对无效地址不影响地处理了.本来动态必须手动释放的,可构造函数没有new,那么析构不用处理,处理了也不会错.其实B好象也对.自己做的,构造没new,析构没有delete,有错么?C++的析构期待编译器?还不对如果引用了外部new出来的,必须指定为NULL!否则一样的要么越界,要么内存不能释放!反正哥只选A地

对于您有没有delete,系统是不会去管的..只有在您的机子内存不够的时候才会出问题..您说的错是指什么错呢..是编译错呢还是运行错呢?..ps:new 不一定要delete,如果是在堆上用new分配空间的是要的,否则将会内存泄露;但是如果我们使用非堆上的空间则不要;这时new只是在已经存在的空间上执行一个构造函数,不管理空间分配,因而空间的管理权不为new对象所有,new对象只要在最后保证执行了析构函数就可以了也就是说,如果你不使用delete,那么编译不会报错,但会占用着内存.所以一般都是要new完就delete,防止内存泄漏.delete的作用也就在于此了. 其实用delete只是告诉系统这块地址空间可用,并非完全释放!

有new就要有delete如果你在类中new,析构函数不会去析构你new的东西,需要手动delete结构体一般只是作为数据存储

new和delete不是函数,它们是操作符.简单地说,new操作符可以完成c语言中的malloc函数功能.char *p=new char[n+1];//开辟新的内存空间就相当于:char* p = (char*)malloc((n+1) * sizeof(char));delete可以完成c语言中的free函数的功能:delete [] temp;就相当于free(temp).当然,new和delete的功能是比malloc和free强大的.

这个是必须的啊.用new分配了一块内存,在使用完之后必须释放掉,否则就是内存泄露;指针也必须置空,不然这个指针就变成野指针了.以上两点都是隐患.有时候不释放也不会出问题,但new和delete一起使用这是标准C++的规则,我们学习应该按照标准来.所以析构函数应该是~LCS(){delete[]a;//new的是数组,释放的时候要加[]a=NULL;}

你好!上面那个才行先delete []sa->p;再delete sa;一个new对应一个delete顺序相反仅代表个人观点,不喜勿喷,谢谢.

网站首页 | 网站地图
All rights reserved Powered by www.lstd.net
copyright ©right 2010-2021。
内容来自网络,如有侵犯请联系客服。zhit325@qq.com