社区
C++ 语言
帖子详情
使用delete和delete[]的问题
mem0set
2011-06-12 09:35:24
class A;
...........
A* a = new A;
或者
A* a = new A[10];
要释放删除的时候我不知道前面用的是不是数组,应该怎么删除呢
...全文
238
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)
mysql中
delete
和drop的区别,SQL中
DELETE
和DROP的简单比较
在SQL命令中
DELETE
和DROP都是可以用于删除数据库的元素,那么它们之间有什么区别?下面本篇文章就给大家简单比较一下
DELETE
和DROP,介绍
DELETE
和DROP的区别,希望对大家有所帮助。
DELETE
命令的简单介绍
DELETE
是一种数据操作语言(DDL)命令,可以
使用
DELETE
命令来从表中删除部分或全部记录。可以和WHERE子句一起
使用
,用于删除满足添加的某些记录;如果未指定WHER...
delete
和Vue.
delete
之前从没发现
delete
和Vue.
delete
有区别,今天在网上无意间刷到了,做个总结。
delete
和和Vue.
delete
都是对数组或对象进行删除的方法。这两种方法对于对象来说其实是没有区别的,
使用
方法会直接删除对象的属性(物理删除)。 let obj = { name: 'fufu', age: 20 } //
delete
obj.age => {name: 'fufu'} // Vue.
delete
(obj, 'age') => {name: 'fufu'} // 测试发现对于对
C++的
delete
和
delete
[]的
使用
区别
对于像int/char/long/int*/struct等等简单数据类型,由于对象没有destructor,所以用
delete
和
delete
[]是一样的!//仅释放了a指针指向的全部内存空间 但是只调用了a[0]对象的析构函数 剩下的从a[1]到a[9]这9个用户自行分配的m_cBuffer对应内存空间将不能释放 从而造成内存泄漏。对于像int/char/long/int*/struct等等简单数据类型,既可以用
delete
也可以用
delete
[]
delete
[] 释放new分配的对象数组指针指向的内存;
delete
和
delete
[]的区别
delete
和
delete
[]的区别
delete
和
delete
[]的真正区别
delete
和
delete
[]的真正区别
C++ 语言
65,187
社区成员
250,526
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章