作者ii237 (羊咩)
看板C_and_CPP
标题Re: [问题] 使用new的记忆体释放问题
时间Mon Jul 27 23:25:07 2009
谢谢各位版的提供的资讯
我今天试了一下
照下面的function来new (用while让它多跑几次)
再用top来看记忆体 在linux下执行
结果是 程式在run时记忆体是会一直被吃掉的
不过在程式结束後记忆体会被释放回来
虽然程式结束之後记忆体会被释放
(不过 C 的malloc似乎就不会因为程式结束释放?)
但显然像版友说的一样 要养成写delete的好习惯才好 :)
才不会程式长期run下来当掉
题外话
刚开始会产生这个疑问是因为在看到一段code:
---------------------------------------------
QTableWidget *tableWidget = new QTableWidget;
tableWidget->setItem(0, 0, new QTableWidgetItem("January"));
tableWidget->setItem(1, 0, new QTableWidgetItem("February"));
tableWidget->setItem(2, 0, new QTableWidgetItem("March"));
---------------------------------------------
这是QT的程式 看到时想说像他这样直接new起来丢进function里
到时找不到point都不知道怎麽delete
才想说是不是其实不用加delete也可以
不过後来我有去找了一下QT底层的sourcecode
发现QTableWidget 在解构子时有去做delete的动作
所以...就真相大白啦! 谢谢大家罗! :)
※ 引述《ii237 (羊咩)》之铭言:
: 各位版友好
: 我想请问一下有关new 和 delete的问题
: 例如下面function
: void function_1 (){
: int *tmp = new int;
: }
: 请问此function_1被呼叫执行後,使用new做出来的记忆体空间是否会被自动release掉?
: 我原本是认为,因为*tmp是function级的变数,因此function_1结束後*tmp这个用来存放
: 指标的空间会被release掉,因此它所指向的记忆体空间(new出来的记忆体)也会被放掉.
: 但後来想想好像不太对,因为C++也不像JAVA一样有自动清除记忆体的功能.
: 我是想问说,在使用new时,若没有配会delete,new出来的空间有可能由系统release掉吗?
: 像是程式结束之类的.或是其实程式结束後记忆体依然没有释放?
: 但是因为我试过多次跑程式,再去看记忆体使用量,似乎也没有增加的迹像.
: 题外话
: 会这麽问其实是因为,看了很多使用new的程式,似乎都没有特别去做delete
: 不知道这是因为写程式的人没有做到正确记忆体释放..或是这是可以接受的用法
: 请各位版友不吝指教,谢谢!
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 114.46.195.20