delete 和 delete []的区别

例如

int   *ptr=new   int[10];

删除时用     delete   ptr;
还是                 delete   []ptr;

------------------------------------------------------------------------------

 

了解C++的人都知道这个答案,用delete []ptr。

但是为什么呢? 如果用了delete ptr有什么后果

 

根据C++标准的描述,如果申请的是单个类型的空间,如new type,则用delete;如果申请的是数组空间,则用delete []。

但是就这个例子而言,如果是vc 6.0的环境,其实delete ptr 和 delete []ptr的结果是一样的,都可以把空间释放掉。但是我在suse linux下面的话会crash。

 

对于一般的编译器而言,对于基本类型,delete ptr 和 delete []ptr都是可以的,都可以把空间释放掉;但如果是对象类型的,如有一个类A, A* ptr = new A[10];,那么delete ptr 和 delete []ptr就有区别了,delete ptr也可以把空间释放掉,但只会调用ptr[0]的析构函数,而delete []则会调用数组中每个元素的析构函数。这就是有些C++的书上会说对于基本类型可以用delete   ptr,而对象一定要delete   []ptr的原因。

 

但这也会因为编译器的不同而不同,有的编译器可能对于基本类型,也仅仅是释放了ptr[0]的空间,所以我们一定要按照标准的做法来做,这里只是探讨一下原因。

 

 

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值