C++ 如果类中有一个指针数据成员,而我没有用new, 析构函数要不要delete?

更详细一点,类中的那些int,char之类的,为什么都不用delete,c++是自动把他们占得内存给释放掉了吗?... 更详细一点, 类中的那些int, char之类的, 为什么都不用delete, c++是自动把他们占得内存给释放掉了吗? 展开
 我来答
小何才露尖尖角儿
推荐于2017-11-25 · TA获得超过362个赞
知道小有建树答主
回答量:344
采纳率:0%
帮助的人:386万
展开全部
C++ 如果类中有一个指针数据成员,而你没有用new, 析构函数是不用delete的?在类中,int char 这些只要不是new的,也同样不用释放,系统会自动把他们占的内存释放掉,只有new 的才会手动的去delete。int char ,这些基本类型,是局部变量,存在于栈上。而一个指针定义的时候,也是在栈上比如int *p;p在栈上,而且p的值也是栈的一个地址。但是当int *p = new int ;这时候,p这个变量是在栈上的。但是p的值是一个地址,这个地址是堆上的一个地址。如果不delete p;那么,这个地址会一直被占用着,不能被其他的对象所使用,所以我们用完这个地址,要把这个地址释放掉。不知道你懂了没有,不懂的再追问。
roaming_sheep
2012-04-11 · TA获得超过699个赞
知道小有建树答主
回答量:589
采纳率:0%
帮助的人:703万
展开全部
变量实际占用的内存分两种分配情况:

一种在栈(stack)上分配,直接声明变量就是在栈上分配的、无法通过new来在栈上分配,无需delete
一种是在堆(heap)上分配,通过new等方式分配,需要delete

1)如果类中有一个指针数据成员,而我没有用new, 析构函数要不要delete?
不需要。

2)类中的那些int, char之类的, 为什么都不用delete, c++是自动把他们占得内存给释放掉了吗?
类对象在分配的时候,就连同内部的int、char这些变量也分配内存了,类对象释放的时候、这些变量也会随着释放。
当类对象在stack上分配,那就没有什么需要特别处理的。
当类对象在heap上分配,只要delete掉类对象,这些int、char变量也就跟随着释放掉了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
歌梦复兴
2012-04-11 · TA获得超过211个赞
知道小有建树答主
回答量:177
采纳率:0%
帮助的人:127万
展开全部
不用,delete必须要和new配套使用。int,char的内存是使用的堆栈内存,而new出来的对象是存储在堆内存,堆内存的申请和释放是由程序员自己操作的;堆栈内存中的数据只要生命周期结束了会自动释放,不用自己去delete的。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
闪闪红红星
2012-04-11 · TA获得超过924个赞
知道小有建树答主
回答量:613
采纳率:0%
帮助的人:378万
展开全部
delete 和new是成对使用的,你没new,当然不需要delete。
是的,你说的int,char之类是在运行栈中存放的,c++自动释放他们的内存。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友d42b18334
2012-04-11 · TA获得超过329个赞
知道答主
回答量:112
采纳率:0%
帮助的人:86万
展开全部
开辟变量生成在堆区,要自己释放,不然倒置内存泄露!开辟变量在栈,在它的scope(存活区域)外,系统自动释放。C++中的对象都是在堆区的。类成员随着对象的delete而消失。而临时变量时过了生存周期就挂了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式