1樓:**夢幻
會有記憶體洩漏的。因為在function內部new的ctest不會從引數傳到main的t裡。
解決方法:
void function(ctest *test)改成void function(ctest *&test)即可。
這種方式不需要修改其他部分。
2樓:匿名使用者
ctest的唯一建構函式ctest沒有使用new操作符,那麼其解構函式也不需要delete操作符,所以類ctest的使用不會造成記憶體洩漏。
但在全域性函式void function( ctest* test )中,先用delete釋放掉區域性變數t使用的動態記憶體,後又用new申請動態記憶體,這顯然有反常規,故這個函式是麻煩製造者。由於該函式中test是區域性變數指標,所以在函式main()中的delete t;不會釋放掉void function( ctest* test )中的test,而是二次釋放main()中的t,故結論是,該**會造成記憶體洩漏,避免的方法很簡單,只需去掉void function( ctest* test )中的test = new ctest();。
3樓:
單就這些**執行來說沒有洩露。new的物件均會被正刪除。
但這並不是好的設計。因為不確定函式中的物件什麼時候會被刪除。
可以考慮使用智慧指標來管理物件。這樣在超出作用域後會自動刪除。
關於煤氣洩漏的問題,煤氣洩漏的原因有哪些?
沒有洩漏,因為煤氣罐裝得時候多少洩漏一點,所以有點味道,沒煤氣種加特殊得化學成分,也就是你聞到得氣味 沒有關係 費話多。也許是煤氣灶有些漏 煤氣洩漏的原因有哪些?1 開關不嚴 2 管線老化 3 接頭鬆了 4 燒水把火撲滅了。5 管道爆裂。這個需要專業的人士到場查驗,一定不要用明火,不要開燈,切記!朗...
c 問題關於char的動態分配記憶體
你程式 邏輯bai 有問題。dustrlen是求字串zhi長,字串必須以 0 結束,你的字dao符沒有回以這個字元結束,因此求答得的結果是不確定的。不一定是16。下面,給你一個正確的例子了。char a a new char 10 a 0 a a 1 b a 2 0 int temp strlen ...
js閉包函式為什麼有記憶體洩漏的問題存在
給你寫個簡單的例子你就明白了 例 function a a 說明 按理來說b時屬於a中的一個區域性變數,是會在呼叫a時建立,呼叫完銷燬的變數,但a中有一個閉包也就是其中的匿名函式呼叫了b,所以記憶體 認為b是被引用的,因此在 的時候不會釋放它。所以b一直存在記憶體中,而外部卻不能呼叫這個變數,這就產...