Qt中,如果申明了兩個數組:
QLabel *label[8];
QLabel *sLabel[8];
這兩個都是QLabel類型的指針數組,希望在以后的使用中動態的分配其內存;
那么就應該:
在class MyLabel中...
for(int i=0;i<8;i++)
{
label[i] = new QLabel("This is a Label",this,0);
//申請空間.
sLabel[i] = new QLabel("",label[i],0);
//第二個Label指針數組的父對象為上面申請過空間的Label.
}
QLabel的構造函數的原形為:
QLabel ( const QString & text, QWidget * parent, const char * name = 0, WFlags f = 0 )
text: Label上要顯示的字符串;
parent: Label的父對象的指針;
name: Label的名字;
f: Label的Flags;
從上面的代碼容易得知label數組每個元素是以當前MyLabel類對象為父對象的;而sLabel里的元素是以對應的label為父對象的;
在MyLabel的析構函數中就有相應的釋放空間的代碼:
for(int i=0;i<8;i++)
{
delete label[i];
//delete sLabel[i];
}
這里要是不注釋掉上面第3行的語句就會出現段錯誤,原因經過查找資料得知在Qt中如果在創建組件對象時設置了父對象時,由父對象負責釋放其子對象的空間.所以上面第2行已經釋放了label的空間,而其子對象的sLabel也隨之被釋放,所以如果第三行再進行釋放就會出現之前所說的錯誤.
Qt雖然提供了這種機制,自動回收部分的內存,但是自己寫程序的時候還是要小心,不要造成內存泄漏,這對于嵌入式的應用來說更加是件重要的事.畢竟現在的嵌入式硬件還是內存較小,而且要求程序可以長期穩定,高效節能的運行.