qt的記憶體管理解決了乙個問題,就是new乙個新物件時不一定要delete,因為如果它有自己的父物件,在父物件刪除時會自動刪除子物件。
這個又帶來乙個新問題,別弄錯爹。
昨天專案一直在關掉mainwindow後報錯,說有野指標,我發現問題出在乙個析構函式上。
communicationtest::~communicationtest()
其中m_progress是communicationtest類的乙個區域性指標,問題就在這句delete m_progress;裡,我發現此時m_progress指向的位址是未知的。
也就是說有人在我delete它之前偷偷delete過了,我就很疑惑誰偷偷delete了我的物件?
然後我發現一件事,在communicaitontest的建構函式裡我寫了這麼一句
...
m_progress=new cprogress;
m_progress->setparent(mainwid);//mainwid是乙個指向mainwindow的指標
...
真相大白,它爹給它已經刪了。
當我關閉整個視窗的時候mainwindow已經釋放了m_progress,我再在析構函式裡delete,肯定要出問題。
所以指定了父物件之後請不要再使用delete了!
Qt的記憶體管理
在qt的程式中經常會看到只有new而不delete的情況,其實是因為qt有一套 記憶體的機制,主要的規則如下 1.所有繼承自qobject類的類,如果在new的時候指定了父親,那麼它的清理時在父親被delete的時候delete的,所以如果乙個程式中,所有的qobject類都指定了父親,那麼他們是會...
QT記憶體管理
使用new操作符來定義乙個物件 qvboxlayout layout new qvboxlayout window 另外一種方法 qvboxlayout layout window c 並沒有提供記憶體自動管理機制,通常,需要程式開發人員自己去做這些事情,比如在建構函式中使用了new去申請了乙個物件...
六 Qt記憶體管理
父子關係 所有指定了父物件的qt物件 繼承自qobject類的例項 與其父物件間存在父子關係 每個qt物件都儲存有指向其所有子物件的指標 每個qt物件都有乙個指向其父物件的指標 當指定 通過建構函式指定,或通過setparent函式 qt物件的父物件時 其父物件會在子物件鍊錶中加入指向該物件的指標 ...