在Qt程式中對記憶體管理的建議

2021-06-07 13:11:19 字數 898 閱讀 3360

在qt程式中對記憶體管理的建議:

1.      使用new建立視窗或者物件的時候,除非有具體需要,一般建議建立父子關係或者從屬關係。因為這樣,當父視窗或者主物件被釋放掉時,其子視窗或者主物件也會一起被釋放。從而可以起到自動釋放資源的效果。

例如:qdialog *dialog = new qdialog(this); //把父窗體this傳遞給對話方塊

以上例子有種效果:子視窗一直都在父視窗的前面。

2.      如果每次都重新new子視窗的話,作用結束,建議直接設定關閉子視窗時自動釋放子視窗資源,不要只是關閉子視窗,因為關閉視窗只是讓視窗隱藏起來,並沒有被釋放(delete)掉。這樣的話,隱藏起來的子視窗會越來越多,既是可以等到跟父視窗一起delete掉。

有兩種方式:

1)可以使用qwidget::setattribute方法來當視窗關閉後自動釋放其占用的資源,而不使用者顯示的去呼叫delete釋放,此方法當然也會呼叫視窗的析構函式。

例如:qdialog *dialog = new qdialog(this);

dialog->setattribute(qt::wa_deleteonclose);

dialog->show();

2)可以過載closeevent事件,然後在closeevent函式體內新增:delete this;

注意:不需要每次使用到同一子視窗時都重新new,只需在使用前new一次就可以了。

3.      如果真需要在程式退出前,delete一些子視窗可以使用deletelater槽函式,使用會安全。

4.      使用qpointer類定義指標,如果指標指向的記憶體單元被釋放掉後,該指標會被自動賦值null。這就不會出現野指標。

qpointerdialog = new qdialog(this);

QT中對記憶體的管理

在qt中,一切繼承自qt自有類的類,如果存在parent指標,那麼當parent指標delete時,該類中的指標 它們都屬於parent指標對應的child指標 也會被delete。綜上,如果我們的視窗對應的類所對應的parent指標為null的話,我們還是要進行一次手動的記憶體管理。我這裡舉個例子...

QT中對記憶體的管理

在qt中,一切繼承自qt自有類的類,如果存在parent指標,那麼當parent指標delete時,該類中的指標 它們都屬於parent指標對應的child指標 也會被delete。綜上,如果我們的視窗對應的類所對應的parent指標為null的話,我們還是要進行一次手動的記憶體管理。我這裡舉個例子...

程式設計師對記憶體的理解

收藏 在c和c 語言開發中,指標 記憶體一直是學習的重點。因為c語言作為一種偏底層的中低階語言,提供了大量的記憶體直接操作的方法,這一方面使程式的靈活度最大化,同時也為bug埋下很多隱患。因此,無論如何,我們都要對記憶體有乙個清晰的理解。32位作業系統支援4gb記憶體的連續訪問,但通常把記憶體分為兩...