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