析构函数的调用问题

调用析构函数可以释放内存。一个问题是,如果int*p=newint(1);然后删除p会释放内存;那如果将p指向别的地方,是不是内存就一直不释放?... 调用析构函数可以释放内存。一个问题是,如果int* p=new int(1);然后删除p会释放内存;那如果将p指向别的地方,是不是内存就一直不释放? 展开
 我来答
百度网友a2eb0ec3c
2012-01-08 · TA获得超过743个赞
知道答主
回答量:71
采纳率:0%
帮助的人:112万
展开全部
为变量分配内存时可以选择分配在栈上,也可以分配在堆上。
栈是程序运行时就分配好的一块内存空间,这里一般存放临时变量,比如你在函数内定义了一个变量int a = 0;a就是分配在栈上了。这种变量不需要你去销毁,程序运行时随时去重复利用这些内存。
堆是一大块未分配的空间,你可以把你的变量分配在堆上,如int *a = new int(1);这就在堆上分配的一块int型大小的内存,用指针a指向这块内存。
析构函数正常情况下什么也不做,析构函数的作用是给你一个机会去手动释放你在堆上分配的内存。如果你在析构函数里面delete 掉你的内存,那析构时会自动执行这句,释放掉内存。但如果你不写这句,在程序结束之前这块内存是不会被释放的,你若将p指向其它地方,那这块内存就泄漏掉了。
当然如果你的程序很小,等到程序结束也不会有很多内存泄漏,这些问题当然没有影响。但如果程序运行时间很长,程序很大,那就要注意了。
delete 应该加上,一个合格的程序员应该去关心每一个需要delete的内存,将所有情况都掌握在自己手中,而不是寄希望于系统。
光点科技
2023-08-15 广告
通常情况下,我们会按照结构模型把系统产生的数据分为三种类型:结构化数据、半结构化数据和非结构化数据。结构化数据,即行数据,是存储在数据库里,可以用二维表结构来逻辑表达实现的数据。最常见的就是数字数据和文本数据,它们可以某种标准格式存在于文件... 点击进入详情页
本回答由光点科技提供
la9297816
2012-01-07 · TA获得超过576个赞
知道小有建树答主
回答量:913
采纳率:0%
帮助的人:592万
展开全部
new是在把变量放到堆中 伴随着程序运行 随着程序结束 变量也就释放了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
光辉肩铠12345
2012-01-08
知道答主
回答量:20
采纳率:0%
帮助的人:19万
展开全部
不释放会有内容泄露
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式