社区
C++ 语言
帖子详情
使用delete和delete[]的问题
mem0set
2011-06-12 09:35:24
class A;
...........
A* a = new A;
或者
A* a = new A[10];
要释放删除的时候我不知道前面用的是不是数组,应该怎么删除呢
...全文
246
25
打赏
收藏
使用delete和delete[]的问题
class A; ........... A* a = new A; 或者 A* a = new A[10]; 要释放删除的时候我不知道前面用的是不是数组,应该怎么删除呢
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
25 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
tianya_unix
2011-06-14
打赏
举报
回复
[Quote=引用 13 楼 supermegaboy 的回复:]
由于单对象的new和数组new对应不同的释放表达式,用同一个指针指向不同类型new的内存本身就是一个不良风格代码,你应该修改代码结构,用不同的指针释放不同类型的new,或者单对象new也使用数组形式,例如:
A *a = new A[ 1 ];
[/Quote]
delete [] a;
这样可以吧
5t4rk
2011-06-14
打赏
举报
回复
[Quote=引用 23 楼 bjtbjt 的回复:]
你自己申请的
怎么不知道呢
要是不清楚或者容易忘你的话
你在定义指向数组时这样写吧,parr //用这个delete[] parr
你在定义一般时这样写吧,p //用这个delete p
呵呵,这样也可以的LZ
[/Quote]
5t4rk
2011-06-14
打赏
举报
回复
你自己申请的
怎么不知道呢
要是不清楚或者容易忘你的话
你在定义指针时这样写吧,parr //用这个delete[] parr
你在定义指针时这样写吧,p //用这个delete[] p
呵呵,这样也可以的LZ
zh_huo
2011-06-13
打赏
举报
回复
假如你分配内存的内型是内置型的话,那就不必考虑究竟用那个形式,但是如果分配内存的是自定义的话,必须用对应的形式,除非你的类中没有定义自己的析构函数。一下这篇文章你可以参考一下,写得很精彩http://www.chinaunix.net/jh/23/311058.html
fyw1990
2011-06-13
打赏
举报
回复
用deleted【】
赵4老师
2011-06-13
打赏
举报
回复
虎头蛇尾是俗人的习惯,
有始有终是君子的操守。
KevinHo
2011-06-13
打赏
举报
回复
delete是释放首地址
delete[]是释放一片连续的属于该指针指向的内存单元
iamsorry_
2011-06-13
打赏
举报
回复
[Quote=引用 17 楼 mem0set 的回复:]
sizeof(a)
new和new[1]是样的吧
[/Quote]
是一样的。
mem0set
2011-06-13
打赏
举报
回复
sizeof(a)
new和new[1]是样的吧
飞天御剑流
2011-06-13
打赏
举报
回复
[Quote=引用 14 楼 mem0set 的回复:]
A* a = new A;
delete[] a;
这样会有什么后果
[/Quote]
这是未定义行为,后果取决于编译器的行为。
iamsorry_
2011-06-13
打赏
举报
回复
删除之前先判断 对象a的大小sizeof(a)。根据不同的大小选择不同的释放方法。
mem0set
2011-06-13
打赏
举报
回复
A* a = new A;
delete[] a;
这样会有什么后果
飞天御剑流
2011-06-13
打赏
举报
回复
由于单对象的new和数组new对应不同的释放表达式,用同一个指针指向不同类型new的内存本身就是一个不良风格代码,你应该修改代码结构,用不同的指针释放不同类型的new,或者单对象new也使用数组形式,例如:
A *a = new A[ 1 ];
mem0set
2011-06-13
打赏
举报
回复
有没有办法在释放的时候检查出指针是不是数组
mem0set
2011-06-13
打赏
举报
回复
因为程序中有时候用new有时候用new[],最后在一个地方释放
LBJMD
2011-06-13
打赏
举报
回复
你自己定义的变量难道不知道类型吗?
Saingel
2011-06-13
打赏
举报
回复
deleted只会释放a[10]所占连续内存以及调用a[0]的析构函数,如果a内没有申请额外内存需要析构函数释放的话就没问题,如果有就会造成内存泄流,
加个[]操作时则会调用a[0]-a[9]析构函数
碎碎念
2011-06-13
打赏
举报
回复
这个怎么会不知道呢?如果忘记的话,直接选中指针a,然后查找a的定义就知道a指向的是数组还是单个对象了。
飞天御剑流
2011-06-12
打赏
举报
回复
[Quote=引用 5 楼 supermegaboy 的回复:]
引用楼主 mem0set 的回复:
class A;
...........
A* a = new A;
或者
A* a = new A[10];
要释放删除的时候我不知道前面用的是不是数组,应该怎么删除呢
这种情况都使用delete [] a;
delete [] a是能处理A *a = new A;这种情况的,这是标准所规定的行为。
[/Quote]
sorry,说错了,上面的delete [] a是未定义行为,还是得依照a的new的类型去delete。
W170532934
2011-06-12
打赏
举报
回复
自己定义的,难道你忘记了??该怎么删除就怎么删除吧,不然容易造成泄漏的哦
加载更多回复(5)
【经典面试题】
delete
和Vue.
delete
的区别
delete
和和Vue.
delete
都是对数组或对象进行删除的方法。这两种方法对于对象来说其实是没有区别的,
使用
方法会直接删除对象...// 测试发现对于对象来说
delete
和Vue.
delete
是没有任何区别的 但是这两种方法对于数组来说
delete
和
delete
[]的区别
delete
和
delete
[]都能释放指针所指向的内存区域。但
delete
只会调用一次析构函数,而
delete
[]还会调用后续所有对象的析构函数。 当数据类型为基本数据类型时,用
delete
和
delete
[]都可以,因为基本数据类型没有析构...
C++入门——new和
delete
C语言内存管理方式在C++中可以继续
使用
,但有些地方就无能为力,而且
使用
起来比较麻烦,因此C++又提出了自己的内存管理方式:通过new和
delete
操作符进行动态内存管理。对自定义类型Anew 和 malloc最大区别是 new对于...
new 和
delete
为什么要匹配
使用
关于 new 和
delete
的
使用
相信大家并不陌生,可是为什么
使用
new 的时候要用
delete
,
使用
new[ ] 的时候又要用
delete
[ ]。
使用
delete
释放 new[ ] 申请的内存又会发生什么?为什么有时不匹配不会报错,有时又会...
C++_new和
delete
通过操作new和
delete
,就可以进行堆上的动态内存管理,他们的用法与c语言中的malloc和free相似,都是申请一块空间后,用一个指针来接收这块空间的地址,归还空间就是用
delete
/free“修饰”该指针。不同的是:new和...
C++ 语言
65,199
社区成员
250,520
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章