Re: [問題] 使用new的記憶體釋放問題
謝謝各位版的提供的資訊
我今天試了一下
照下面的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
討論串 (同標題文章)
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章