C++:这里的delete []p是什么意思呢?p1和p2对象都有指针p,难道是都释放了吗?

作者&投稿:滑儿 (若有异议请与网页底部的电邮联系)
C++中,if(p) delete[]p是什么意思?~

该操作功能为如果p非空,则释放p指向的内存。
delete 是C++中的关键字,其功能为释放内存,与之对应的是new关键字。
new关键字可以申请一个单位空间,如
int * p = new int;
是申请一个大小为int型所占空间大小的内存,并把首地址赋值给指针p。
当使用后要释放时,需要调用
delete p;

new关键字还可以申请一组空间,如
int *p = new int [10];
申请一组10个int型的空间,并赋值给指针p。
这种情况下要释放时需要调用
delete [] p;
这种就是本题中所描述的情况。

至于if(p)这种写法是从C中继承来的。C中使用的分配空间函数为malloc,释放空间函数为free.
当调用free且参数为空指针(NULL)时,程序会崩溃,所以在释放的时候一般用
if(p)free(p);来做保护。即只有p非空时才释放。
而C++的delete关键字对此已经做了优化,当参数p为NULL时将不会报错,同时也不会做任何操作。所以在这里的if(p)实际上已经没有必要。只不过在使用C的free函数习惯后,或者不了解delete的新特性的编程人员,还是会加上if(p)来做保护。

恩是的。只要是素组就这样释放。
new []和
delete []
必须匹配使用。
new
delete
匹配使用。

char* p=new char[128];
delete []p;

int*ia=new int();
delete ia;

int*a=new int[1];//只有一个元素的数组也必须使用delete[]释放。

delete []a;

int **a = new int[5][6];

delete []a;

delete []的意思是删除数组对象
你的p1 p2是类的对象指针,而delete[]只在你类的析构函数中.delete[]p只是删除你 A(){ p=new char[80]; p[0]='\0'; }
这里创建的对象数组.p1和p2在申请时,各自都有一个p指向的对象数组的.一个是p1->p一个是p2->p

指针p指向的内存是你在类的构造函数中动态分配的,动态分配的内存必须手动释放内存
释放单个对象,用delete p,而释放数组用delete [] p,类中你分配的是动态数组,所以用delete [] p释放内存。

定义对象时,系统会自动调用对象的构造函数,这时就会自动分配内存,当程序执行到对象的生命周期范围之外,程序会自动调用对象的析构函数,这时会释放动态分配的内存。

每个对象的成员变量p都是动态分配的,所以都会释放内存。

被new动态申请内存了,得delete释放

p=new char[80]
这个是动态申请内存,必须释放


开机按Del键后如何在里面选择用U盘装系统
u盘装系统如何选择高级BIOS设置 没看明白,不就是开机按DEL进BIOS嘛,然后选择硬盘启动项(Hard Disk Boot Priority)然后F10保存就好了。重启就是从你U盘里面进入了WinPE了。如何在虚拟机上通过U盘装系统 虚拟机安装操作系统,这里不用windows的virtual pc,我们用大家比较习惯的vmware做讲解,首先下载...

电脑卡在主板logo界面 del都进不去
1.下面这张就是主板Logo界面,有人会说笔记本开机时不是这个样子,那是因为笔记本电脑的主板都是订制的设置了自己电脑品牌型号信息,所以显示不一样。这个界面我们会看到这样一句英文“press del to run setup”台式机一般都是del,笔记本根据制造厂商不同也不一样,根据自己页面提示选择按哪个键,这里要...

电脑开机出现ctrl+alt+del怎么解决?
1、可能是由于以下的原因:操作系统文件损坏,MBR表损坏,硬盘数据线松了,硬盘坏了;2、您可以在【F8】进入系统启动选项,选择其中的【高级选项】,您可以尝试选择【启动修复】、【系统还原】等选项,看一下能否正常进入系统;3、如果不行可以用U盘或光盘引导,进入PE系统,用分区软件修复MBR表(有的...

会做电脑系统的近!我打开电脑按下del出现的!
你天机按DEL 就进了BIOSS设置里面了可以直接退出要问意思的话请下面:设置详解***BIOS(basic input output system 即基本输入输出系统)设置程序是被固化到...这里是用来设置系统自检遇到错误的停机模式,如果发生以上错误,那么系统将会停止启动,并给出错误提示。BIOS FEATURES SETUP(BIOS功能设定) ENABLED是开启,...

为什么这台华硕电脑摁Del进到这里,怎么重装系统呀?
一般都是开机按F12或F2选择U盘启动,用U盘重装系统吧。U盘重装系统步骤:1、利用大白菜或老毛桃等U盘制作工具,将U盘制作成启动盘,并拷贝镜像文件至U盘;2、重启计算机,按Del键进入Bios设置,将计算机的第一启动项改为“从USB启动”;3、第一启动项设置完毕后,按F10保存退出,插上制作好的引导U盘,...

如何解决电脑开机显示ctrl+alt+del
如果你的windows电脑在开机的时候每一次都需要按Ctrl+Alt+Del键盘的话;这真心是非常的麻烦的;那么如何解决电脑开机显示ctrl+alt+del呢?这里我就教给大家解决电脑开机显示ctrl+alt+del的方法。解决电脑开机显示ctrl+alt+del方法 1、我们制作大番薯u盘启动盘,然后插入电脑usb接口,按启动热键选择u盘启动,...

python语句 del a[2:4] 什么意思
pyhton中del语句可以用来删除列表中某一个元素或者是某一个片段,只需要给出元素所在的索引值,而不需要给出元素的具体值。del a[2:4]就是指删除列表a中索引2到索引4的值,但不包括4。代码示例:

电脑Win7开机进去显示要按Ctri和Alt和Del怎么办?
电脑开机显示PRESS CRTL+ALT+DEL TO RESTART 不能进系统,根据以往的经验,很可能是三个原因造成的:(首先将电脑关机,打开机箱,将硬盘的数据线和硬盘的电源线重新拨插一下,这样可以排除因硬盘接触不良,造成读盘不出,而导致出现上面的英文界面。)(1)造成这个现象的主要一个原因是:硬盘的主...

电脑开机显示Press DEL to run Setup怎么办?
1. 下面这张就是主板Logo界面,有人会说笔记本开机时不是这个样子,那是因为笔记本电脑的主板都是订制的设置了自己电脑品牌型号信息,所以显示不一样。这个界面我们会看到这样一句英文“press del to run setup”台式机一般都是del,笔记本根据制造厂商不同也不一样,根据自己页面提示选择按哪个键,这里要...

Win10按Ctrl+Shift+Del无法打开任务管理器怎么办
有些Win10正式版用户会遇到无法打开任务管理器的情况,造成很多操作都没办法进行。在任务栏上点击右键,菜单中的“任务管理器”选项显示为灰色不可用;按“Ctrl+Shift+Del”组合快捷键也无法调出任务管理器。针对此疑问,下面一起看下两种修复Win10按“Ctrl+Shift+Del”无法打开任务管理器的问题。一、组...

杨浦区13350168362: C++:这里的delete []p是什么意思呢?p1和p2对象都有指针p,难道是都释放了吗? -
戏谢脑麦: 指针p指向的内存是你在类的构造函数中动态分配的,动态分配的内存必须手动释放内存 释放单个对象,用delete p,而释放数组用delete [] p,类中你分配的是动态数组,所以用delete [] p释放内存.定义对象时,系统会自动调用对象的构造函数,这时就会自动分配内存,当程序执行到对象的生命周期范围之外,程序会自动调用对象的析构函数,这时会释放动态分配的内存.每个对象的成员变量p都是动态分配的,所以都会释放内存.

杨浦区13350168362: C++ delete 方括号 位置 三种写法中,哪种是对的 -
戏谢脑麦: 如果你的_不代表空白,则: delete[]_p是对的,原因如下: delete[]是关键字,是一个运算符. delete_[]则不是关键字. 其后是操作数.否则就全是对的.

杨浦区13350168362: C++中delete [1]p什么意思 -
戏谢脑麦: delete[1]p代表析构数组p中的第一个数组.所谓数组,就是相同数据类型的元素按一定顺序排列的集合,就是把有限个类型相同的变量用一个名字命名,然后用编号区分他们的变量的集合,这个名字称为数组名,编号称为下标.组成数组的各个变量称为数组的分量,也称为数组的元素,有时也称为下标变量.数组是在程序设计中,为了处理方便, 把具有相同类型的若干变量按有序的形式组织起来的一种形式.这些按序排列的同类数据元素的集合称为数组.

杨浦区13350168362: c++中的delete的操作到底是怎么回事?? -
戏谢脑麦: 00399208 代表的是p这个指针指向的地址值,在delete之前输出的那个5代表p这个指针指向的一个int空间里面存放的数值; 在你delete之后,p这个指针没有变化,仍然是00399208,但是它指向的空间已经被释放了,所以输出的就是一个“不确定”的数值:-57266307.对于问题的补充: 2.如果在程序代码后面再加上*p=5;cout<<*p<<endl; 可以再输出一个5;注意已经使用了delete操作. 空间虽然释放了,但那时p这个指针仍然是有效的,它指向的内存仍然是可写的,所以程序会进行正确的输出.

杨浦区13350168362: C++中,if(p) delete[]p是什么意思? -
戏谢脑麦: 该操作功能为如果p非空,则释放p指向的内存.delete 是C++中的关键字,其功能为释放内存,与之对应的是new关键字.new关键字可以申请一个单位空间,如 int * p = new int; 是申请一个大小为int型所占空间大小的内存,并把首地址赋值给...

杨浦区13350168362: c++ 中 delete p 是不是代表p指向的是null 也就是空内存空间 -
戏谢脑麦: 不是 用new 给p 开了一块内存空间后,用delete来回收这块内存空间 一般delete之后,再让p=null

杨浦区13350168362: c++ 中delete[ ]P
戏谢脑麦: num += t.num // 这应该是累加字符串的长度 char* p = name; // p指向旧的name字符串 name=new char[strlen(t.name)+strlen(name)+1]; // 重新开辟一块长度为两个字符串总和的空间,外加一个'\0' if(name!=NULL)strcpy(name,p); // 如果name不...

杨浦区13350168362: c++ 怎么用delete -
戏谢脑麦: delete只是吧指针所指的内存给释放掉,并没有把指针本身删掉.所以delete p;后p并不等于null,它还志向原来的内存地址,成为野指针,再用就容易产生错误,最好delete后,赋值null.知道误删了改过来就行了么,误删的那部分内存会由操作系统重新分配给其它指针或者变量,就是再读出来也可能已经不是原来的内容了.

杨浦区13350168362: C++有关delete p与delete []p的问题 -
戏谢脑麦: 对于楼主定义的int[] 来说, delete和delete[] 效果完全一样.就释放内存来说,编译器是根据你这个指针的地址来知道这块内存的大小的,因为你申请的时候,内存管理器记录了这个地址开始的申请的内存的大小.delete和delete[]的差别,在数组元素是一个对象的时候,就可以体现出来.delete一般情况下,只会永远开始地址那个对象的析构函数,而delete[]可以调用数组中所有对象的析构函数. 对于简单的数据类型而言,delete和delete[]都只是释放内存,没有什么区别.

杨浦区13350168362: C/C++ int *p = new int[10]; 释放p的时候是要delete p;,还是delete []p;?说明为什么不是另一种. -
戏谢脑麦: delete []p; 因为你的 p 是作为一个指针 指向一片连续的内存的第一个空间,如果你用 delete p;它就只会释放 p 指向的当前空间,也就是这块内存的第一个空间,而后面的空间都没有被释放,delete []p这个就是把这一整块连续内存释放掉,

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网