對於使用指標,使用new建立的視窗,當然可以使用delete顯示的釋放其占用的資源:
widget *w = new widget();
delete w;
對於使用指標,使用new建立的視窗,還可以使用qwidget::setattribute方法來當視窗關閉後自動釋放其占用的資源,而不使用者顯示的去呼叫delete釋放,此方法當然也會呼叫視窗的析構函式:
widget *w = new widget();
w->setattribute(qt::wa_deleteonclose);
這可以用於非模態對話方塊,因為非模態對話方塊如果是用指標形式建立,但是再接著delete的話,視窗就沒了,如果不使用delete釋放視窗占用的資源,又會贊成洩漏。如果使用普通變數建立,同樣的也因為變數作用域馬上就結束而視窗也沒了,另一種方法就是使用多執行緒,不過這個的代價大了點。所以這種技術在建立非模態對話方塊上是非常典型的運用。
測試方式:在widget中分配大量的記憶體,顯示與關閉多個此類視窗,看看任務管理器裡此程式的記憶體變化情況,是否真正的釋放了占用的記憶體(當然釋放了)。在c++中使用new分配記憶體時,如array = new double[length],此時,給array的記憶體實際上並沒有真正的分配,必須等到第一次使用這些記憶體後才會真正地為其分配物理記憶體,如:memset(array, 1, length * sizeof(double))
視窗的記憶體管理交給父widget:
widget *w = new widget(parent);
但這時,如果父widget不結束,這個視窗的資源一直會占用著。
至於使用哪種技術來釋放視窗的資源,要看具體的運用時,哪種方式更合適。
Qt 釋放視窗資源
qt 釋放視窗資源 1.對於使用指標,使用new建立的視窗,當然可以使用delete顯示的釋放其占用的資源 widget w new widget delete w 2.對於使用指標,使用new建立的視窗,還可以使用qwidget setattribute方法來當視窗關閉後自動釋放其占用的資源,而不...
Qt捕捉視窗關閉事件
有時候我們希望在關閉視窗之前做一些操作,例如儲存快取資料或向使用者提示是否關閉視窗等等。由於一般的視窗都是繼承自 qwidget,那麼我們可以通過覆蓋 qwidget 中的虛函式 closeevent qcloseevent event 來達到這個目的。1 首先新增依賴庫 include 2 接著宣...
視窗類釋放問題
寫了乙個帶窗體的dll,在dll初始化時呼叫 if one findwindow sipselect clsname,null null 但是在第二次載入dll失敗,當然以後都會失敗的。設計發現,if one findwindow sipselect clsname,null null 失敗,導致不...