天天看點

Qt [GC9-12]:中途遇到問題解決 析構函數無法釋放資源

Qt [GC9-12]:中途遇到問題解決 析構函數無法釋放資源

基于Qt的汽車儀表模拟

在我準備開始寫HUD的時候,發現一個新的問題。

那就是我開始将我的資源釋放都寫在了控制台的析構函數中,但是呢,在程式結束的時候卻不會釋放我的資源,這點搞得我好煩啊,析構函數不就是在程式結束的時候釋放資源嗎。

那麼具體表示就是我在控制台中建立了HUD視窗,并且在控制台的析構函數中實作了對HUD視窗的回收。但是呢,結果卻是當我結束控制台程式的時候,HUD視窗并沒有随之消失,依舊顯示在說面上。代碼如下

ControlPanel::~ControlPanel()
{ 
    if(timer_Change_Jianwei_Color)
    {
        timer_Change_Jianwei_Color->stop();
        delete timer_Change_Jianwei_Color;
        timer_Change_Jianwei_Color = NULL;
    }
    if(timer_Get_Current_Time)
    {
        timer_Get_Current_Time->stop();
        delete timer_Get_Current_Time;
        timer_Get_Current_Time = NULL;
    }
    if(myHUD)
    {
        myHUD->close();
        delete myHUD;
        myHUD = NULL;
    }
    delete ui;
}      

對應的解決方法是啥,其實很很簡單,就是我自己寫一個資源回收的含,在控制台程式結束的時候先調用我的資源回收,完了吧控制台的關閉函數寫在我的資源函數回收裡面就好了。代碼如下

void ControlPanel::my_Close()
{
    if(timer_Change_Jianwei_Color)
    {
        timer_Change_Jianwei_Color->stop();
        delete timer_Change_Jianwei_Color;
        timer_Change_Jianwei_Color = NULL;
    }
    if(timer_Get_Current_Time)
    {
        timer_Get_Current_Time->stop();
        delete timer_Get_Current_Time;
        timer_Get_Current_Time = NULL;
    }
    if(myHUD)
    {
        myHUD->close();
        delete myHUD;
        myHUD = NULL;
    }
    this->close();
}      
Qt [GC9-12]:中途遇到問題解決 析構函數無法釋放資源

繼續閱讀