学习delete时自己总结的对么。

xuegao007 2008-02-21 05:10:52
大家好,帮我看看我总结的对吗?不对的请指点。要是正确请帮我分析一下。谢谢~

delete[] p是告诉C++,p指向的是一个数组。 在编写程序时,若p指向的是基本类型的数组,[]漏掉也不会出错;但若p指向的是非基本类型的数组的话,就会出现错误。在析够函数中,带[]和不带[]都不会出错的。
#include <iostream.h>
#include <string.h>

class Person
{
public:
Person(){pName = new int[3];};
~Person()
{
delete[] pName; //在析够函数中有没有[]均不会出错。
}
protected:
int* pName;
};
void fn()
{
Person * ps = new Person[4];
delete[] ps; //去掉[]会出错的。
/*
int* p = new int[3];
delete p; //此时有没有[]均不会出错。
*/
}
void main()
{
fn();
}


...全文
205 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
xuegao007 2008-02-22
  • 打赏
  • 举报
回复
http://topic.csdn.net/u/20080220/20/ada90294-7a1c-462e-93b5-ca8494b98d66.html?seed=533639408
xuegao007 2008-02-22
  • 打赏
  • 举报
回复
去掉[], 在析够的时候也是会调用和分配个数相同的析够函数的。
我明白大家的意思。但不知道为什么基本类型时不出错。
rularys 2008-02-21
  • 打赏
  • 举报
回复
不配对就会出错;就是不错也会错!
anmoi_yang 2008-02-21
  • 打赏
  • 举报
回复
若p指向的是基本类型的数组,[]漏掉也不会出错;

================
在BC上会报错.
hong8292 2008-02-21
  • 打赏
  • 举报
回复
delete和delete[]的区别是delete[]将会对数组里的每一个元素调用析构函数,而delete只会对第一个元素调用析构函数:相同点是都会释放对象所占用的内存。基本类型比较特殊,不用显示的调用析构函数,因为其占用的内存直接消毁即可。但是如果是自己定义的类型,如果需要在析构函数里释放所申请的资源(这个资源是广义上的,不只内存,还可能是OS的资源:互斥信号量,绘图句柄,文件句柄。。。。。。),如果直接用delete去释放delete[]申请的内存,你想多少资源泄露了。所以作为正确的习惯,是要配对使用。
HelloDan 2008-02-21
  • 打赏
  • 举报
回复
有一个是可以肯定的,那就是:
当用new数组,delete时加 []

对于数组的情况,有人说是built-in type的可以不用 [],但加了就一定是对的。所以以后对应用就行了。
独孤过儿 2008-02-21
  • 打赏
  • 举报
回复
在编写程序时,若p指向的是基本类型的数组,[]漏掉也不会出错;
=======================
谁告诉你这样不会错的?思想上都错了,偶尔碰巧混过去了,你觉得这算是对吗?
eagleboycn 2008-02-21
  • 打赏
  • 举报
回复
对应new[],如果delete时候不加[]
是不是就是内存泄漏的来源?
本来应该释放一组的,只释放了一个?
ltc_mouse 2008-02-21
  • 打赏
  • 举报
回复
taodm大哥是给你一种正确的编程风格。也是我们应该尽量遵守的规则。对于基本类型,delete时有没有[]确实效果一样,但建议加上;即,我们把int等基本类型视为特殊对象,就一种统一的分配/释放风格,多好呀~

你提到的“在析构函数中,带[]和不带[]都不会出错的”,这句话不正确。你的例子只是针对基本类型数组;类的成员也可以是对象指针,指向对象数组。
xuegao007 2008-02-21
  • 打赏
  • 举报
回复
可以上机运行一下,情况正如我描述的
taodm 2008-02-21
  • 打赏
  • 举报
回复
全错!
new和delete的形式必须严格匹配才确保正确。

64,651

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧