社区
C++ 语言
帖子详情
使用delete和delete[]的问题
mem0set
2011-06-12 09:35:24
class A;
...........
A* a = new A;
或者
A* a = new A[10];
要释放删除的时候我不知道前面用的是不是数组,应该怎么删除呢
...全文
206
25
打赏
收藏
使用delete和delete[]的问题
class A; ........... A* a = new A; 或者 A* a = new A[10]; 要释放删除的时候我不知道前面用的是不是数组,应该怎么删除呢
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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...
在 JS 中要尽量避免
使用
delete
操作符
目录一、
delete
操作符灵魂六问1、
delete
的返回值是什么?2、
delete
删除不存在的属性返回值是什么?3、
delete
能不能删除原型上的属性?4、
delete
能否删除变量?5、
delete
删除数组某个数据,数组长度会不会变?6、哪些属性不能被
delete
删除?二、若不
使用
delete
,该如何删除对象的属性? 一、
delete
操作符灵魂六问 关于
delete
操作符的几个
问题
:
delete
的返回值是什么?
delete
删除不存在的属性返回值是什么?
delete
能不
C++中的
delete
和
delete
[ ]的区别
以前看书的时候,书上说
使用
new申请的内存,释放时用
delete
,
使用
new [ ]申请的内存释放时要用
delete
[ ]才行,这两个一定要记住,申请时用了方括号,则释放时也要加上方括号,否则就会出错。但是并没有解释为什么这样,会出什么错。今天正好看到这个,记录下。关于动态申请的内存,分两种情况:基本数据类型的分配和自定义数据类型的分配。两者不同。1、基本数据类型 对于基本数据类型,假如有如下代...
delete
和
delete
[]的区别
delete
和
delete
[]的区别 从直观角度看,
delete
就是释放单个ptr对象指向的内存,
delete
[]释放连续多个ptr对象指向的内存; 释放单个对象内存: string* a = new string;
delete
string; 释放连续内存: int* string = new string[10]; for (int i = 0; i < 10; i++) { *(a + i) = "1"; }
delete
[] a; 释放连续内存的特例: int*
C++ new和
delete
的
使用
new和
delete
是C++里非常重要的两个关键字,意味着从“自由存储(堆)”分配指定大小的内存和释放掉这些内存。这些用法哪怕初学者也会,但是今天要讲的不是这个。今天要讲的是
使用
中容易忽视的细节和可能引发的错误首先,new和
delete
总是成对出现,顺序也不能错。一定是先new再
delete
。其次,new和
delete
是针对单个对象,还有new[]和
delete
[]针对数组。最后,我们先从最简单的
使用
开始,慢慢带入。new和
delete
还可以操作自定义对象。struct t {
C++ 语言
64,676
社区成员
250,490
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章