C++ new分配的內存不delete會泄漏嗎?
01-07
我這樣給float分配了內存
float *p_fees = new float[20];如果執行完了這個代碼塊, 代碼塊外面還有代碼, 給這個*float分配的內存是不是會泄漏?
會
艾瑪知乎上居然有我會答的編程問題!
不會報錯,但是在output裡面會有warning,跑久了會出問題,而且關乎內存的問題,很難找到。所以還是養成良好的編碼習慣
你用的是託管的C++嗎?基於.Net的?
關鍵點是new的東西使用了多久,如果確定不再用了,卻不處理,就可以算內存泄漏。如果程序生命中,只new這一次,如單例,沒毛病。壞的影響是,不斷的new,OS就只能不斷分配你新的內存,其結果就是你看到你的程序消耗內存不斷增長,這就是內存泄漏壞的影響。對你而言,new/delete是很簡單抽象的,直接交給了OS。對於操作系統,它需要管理這些內存的狀態,那是相當複雜的事了。
對new 可以借用全局變數的內存哇?就是new placement的使用么?
這種c++基礎書上都有的問題。。。題主還是好好看書吧
一個new會向內存申請一塊空間,運行結束時必須釋放空間,即為delete,不delete的話會出現溢出,據說debug也不會報錯呦~我只是胡扯~
c++中的new和delete最終應該是調用malloc和free吧?所以和c語言一樣啊,你malloc一塊內存不free,於是內存泄露了(大霧)
void * operator new(std::size_t size) throw(std::bad_alloc) {
if (size == 0)
size = 1;
void* p;
while ((p = ::malloc(size)) == 0) {
std::new_handler nh = std::get_new_handler();
if (nh)
nh();
else
throw std::bad_alloc();
}
return p;
}void operator delete(void* ptr) {
if (ptr)
::free(ptr);
深入探究C++的new/delete操作符
如果進程結束,會自動釋放。所以如果是全局變數的話,應該可以不用delete,反正生命周期和程序一樣長。
推薦閱讀:
※C++ 有哪些奇技淫巧?
※拷貝構造函數何時調用?
※什麼是tlsf內存分配演算法? 它和普通的內存分配演算法有什麼區別?
※C++派生類的成員或友員只能通過派生類對象來訪問基類的受保護成員?
※變數名儲存在那裡,變數的儲存機制是什麼?
TAG:C |