弱弱的问题,关于作用域!

lugaideath1 2009-03-18 09:38:05
在C++里面new跟delete一般是成对出现,但我曾经听过有人跟我说,它说其实不delete也可以,说什么那对象过了作用域就会自动释放,他说的对吗?

混了!我觉得不对吧,作用域又是指哪里呢?
...全文
80 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
chin_chen 2009-03-18
  • 打赏
  • 举报
回复
要么是内存管理系统帮你delete,要么自己delete,不会出现函数里面作用域到了,自己delete的。除非相应的析构函数调用delete的。

作用域 {}这就是作用域

还包括 class 函数啊,文件啊等等都是一个作用域
lugaideath1 2009-03-18
  • 打赏
  • 举报
回复
很好!明白了!谢谢楼上的!
  • 打赏
  • 举报
回复
[Quote=引用楼主 lugaideath1 的帖子:]
在C++里面new跟delete一般是成对出现,但我曾经听过有人跟我说,它说其实不delete也可以,说什么那对象过了作用域就会自动释放,他说的对吗?

混了!我觉得不对吧,作用域又是指哪里呢?
[/Quote]

一个进程使用C库函数malloc声请内存时,会调用brk()声请进程可用的堆线性区,然后分配物理内存映射到此线性区,
进程页表表项中会有对应的物理页描述。
当进程exit()结束时,会调用exit_mmap(),释放掉进程所有映射到可用线性区的物理页面,也即释放掉页表中对应的
所有物理页面,包括了由malloc声请来的内存。
那么为什么说malloc后没有free,程序结束会导致内存泄露呢?


内存泄露的问题在7x24小时不退出的程序中才比较严重

程序退出肯定是会free的。但并非所有程序都会退出。也并非所有电脑都会每天关机。
new的道理跟malloc一样。
wuyu637 2009-03-18
  • 打赏
  • 举报
回复
当然不对。

但是存在一些程序可以这么做的。比如多进程的时候,整个进程都结束了,就不存在内存泄漏的问题,

65,211

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧