new释放内存理解c++

释放内存后,本身抄指针的内容是不会改变的即指针指向没有变,但是它里面保存的地址所对应的内存在系统里标记为未使用的即指向的内存区域已经被系统收回了,这块内存随时可能会被分配给其他进程或进程里面的变量使用,所以要避免使用此指针,因此要把这个指针置为NULL, NULL指针是不指向任何一个地址的,nullptr  和  NULL  一样

指针指向的是数组用delete[]   (中间有无空格都可),否则用delete

delete[] 
delete [] 

如下,其他指针有指向此new指针首地址,只需要释放一次,两个任意释放一个即可,不能两个都释放,因为他们指向同一块内存( 不能释放已经释放的内存块),如果其他指针不指向此new指针首地址则不能用其他指针释放

int *cossinidx = new int[ndstwidth * 2];
int * cossinptr = cossinidx;

函数内部的定义的临时变量指针就像其他变量一样,函数结束则自动被释放,但是new的内存空间不会被释放,所以要手动释放

如果向此new空间首地址的指针是在函数内定义的,函数结束会自动被释放,把它置为NULL,是担心它在此函数内被再次使用,如果是在函数结束释放了new的空间,此指针也可以不置为NULL

在函数的内new空间后的每一个返回值前面都要进行释放

指向此new指针首地址的指针才能释放此内存是因为地址首地址里面存放了很多信息,包括了内存大小等信息,再释放指针的时候系统会自动根据这些信息释放内存

delete[]   rg   用来释放rg指向的内存,!!还逐一调用数组中每个对象的destructor

new()分配这种类型的一个大小的内存空间,并用括号中的值来初始化这个变量

new[] 分配这种类型的n个大小的内存空间,并用默认构造函数来初始化这些变量

int *pp=new int;//delete pp;
int *p0=new int[3] {1,2,3};//delete[] p0;
int *p1=new int[3] ;//delete[] p1;

malloc和new一样,但是释放空间用free

 

对空指针应用delete是安全的

 

定义一个指针但是未赋值时,指针为NULL

int* p;

 

new创建类对象例子:CTest* pTest = new CTest();

delete pTest;

pTest用来接收类对象指针。

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值