1. 對(duì)于使用指針,使用new創(chuàng)建的窗口,當(dāng)然可以使用delete顯示的釋放其占用的資源:
Widget *w = new Widget();
delete w;
2. 對(duì)于使用指針,使用new創(chuàng)建的窗口,還可以使用QWidget::setAttribute方法來(lái)當(dāng)窗口關(guān)閉后自動(dòng)釋放其占用的資源,而不用戶(hù)顯示的去調(diào)用delete釋放,此方法當(dāng)然也會(huì)調(diào)用窗口的析構(gòu)函數(shù):
Widget *w = new Widget();
w->setAttribute(Qt::WA_DeleteOnClose);
這可以用于非模態(tài)對(duì)話(huà)框,因?yàn)榉悄B(tài)對(duì)話(huà)框如果是用指針形式創(chuàng)建,但是再接著delete的話(huà),窗口就沒(méi)了,如果不使用delete釋放窗口占用的資源,又會(huì)贊成泄漏。如果使用普通變量創(chuàng)建,同樣的也因?yàn)樽兞孔饔糜蝰R上就結(jié)束而窗口也沒(méi)了,另一種方法就是使用多線(xiàn)程,不過(guò)這個(gè)的代價(jià)大了點(diǎn)。所以這種技術(shù)在創(chuàng)建非模態(tài)對(duì)話(huà)框上是非常典型的運(yùn)用。
測(cè)試方式:在Widget中分配大量的內(nèi)存,顯示與關(guān)閉多個(gè)此類(lèi)窗口,看看任務(wù)管理器里此程序的內(nèi)存變化情況,是否真正的釋放了占用的內(nèi)存(當(dāng)然釋放了)。在C++中使用new分配內(nèi)存時(shí),如array = new double[length],此時(shí),給array的內(nèi)存實(shí)際上并沒(méi)有真正的分配,必須等到第一次使用這些內(nèi)存后才會(huì)真正地為其分配物理內(nèi)存,如:memset(array, 1, length * sizeof(double))
3. 窗口的內(nèi)存管理交給父Widget:
Widget *w = new Widget(parent);
但這時(shí),如果父Widget不結(jié)束,這個(gè)窗口的資源一直會(huì)占用著。
至于使用哪種技術(shù)來(lái)釋放窗口的資源,要看具體的運(yùn)用時(shí),哪種方式更合適。