Qt中對象的釋放

來源:互聯網
上載者:User

今天就來談談在qt中類對象的釋放。在qt代碼中大家會見到很多個物件new了沒有delete,你可能會疑惑,這不是會造成堆記憶體流失嗎?在qt中其實有其的一套對象管理模型,雖然不及java,C#等語言的記憶體回收機制。

1.

 LoginDialog ld(this);//指定父親是為了顯示的時候系統完成位置的計算    ld.setWindowTitle("Login");    ld.show();    ld.exec();//啟動一個局部的事件迴圈,就是dialog阻塞在這,直到使用者關閉表單,也就是關閉了這個局部的事件迴圈    //這種情況下的記憶體在棧上,這個dialog所佔的記憶體會在退出這個函數時銷毀對象。

2.

LoginDialog *ld = new LoginDialog(this);    //在堆上分配記憶體,就需要我們釋放,可是這邊沒有釋放,可是檢測沒有記憶體流失,是因為,我們指定了this,父親,當我們關閉    //主表單的時候,父親會釋放它孩子的記憶體    ld->setWindowTitle("Login");    ld->show();    ld->exec();

你如果沒有指定tthis,那麼位置不合適,記憶體流失

3.使用智能指標

 QScopedPointer<LoginDialog> ldp(new LoginDialog(this));    //這個效果和1是差不多的,只是一個在棧上,一個在堆上    ldp->setWindowTitle("Login");    ldp->show();    ldp->exec();

例子代碼:http://pan.baidu.com/share/link?shareid=2438831253&uk=3507221172

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.