MFC應用程式,在處理函式中建立的物件,在處理函式結束後該物件會被清除嗎

2022-05-18 16:27:19 字數 2255 閱讀 4030

1樓:匿名使用者

會清除,確切地講是會執行解構函式,但是initinstance有點細微的區別,我們做個試驗

新建一個工程1,預設,在預設生成的dlg類中標頭檔案加~cmy1dlg(); cpp檔案中加

cmy1dlg::~cmy1dlg()

afxmessagebox這個函式是彈出一個視窗,等待使用者按回車,理論上這個程式執行後關掉時會彈出一個有文字「1」的視窗,但事實是沒有彈出,但是沒有彈出不代表沒有執行解構函式,因為 afxmessagebox這個函式不同於messagebox,他在彈視窗的同時會發出「叮」的一聲,再試一下,關閉的時候雖然沒有彈視窗,但是有「叮」,這就可以理解為執行了解構函式,但是不完全,因為這時跟整個程式的資源已經銷燬了,所以不會再彈窗了,但是至於為什麼還有聲音我就不是很瞭解了。windows程式都是一次性的,因為是遵循解構函式的法則,語句結束就銷燬

會,這個就不會有問題了,在剛才工程中加一個按鈕,然後再1dlg標頭檔案中建一個類

class a

~a()

};雙擊按鈕,在單擊訊息中加入** a aa;

執行程式,單擊一下按鈕,會正常彈出da的訊息視窗和「叮」

解構函式最常見的是在呼叫他的語句塊結束時呼叫

2樓:匿名使用者

在某一個函式中建立的物件、變數會隨著這一個函式的結束而被清除。

3樓:匿名使用者

如果是值物件,會在函式宣告週期結束自動釋放,如果是指標new在堆裡的,需要手動delete的。建立cxxdlg物件通常用值物件即可。

c# 一個函式中new的物件,在這個函式呼叫結束時是否會被**所佔記憶體?

4樓:匿名使用者

c#中有垃圾自動**機制,但是最好是自己:new物件.dispose(),因為自帶**機制的**時間不確定,容易造成記憶體浪費或者某些可能的衝突。自己釋放記憶體可以提高程式的效率

5樓:飄零的狐狸

會的 c#有垃圾**機制

6樓:匿名使用者

使用new關鍵字之後的物件都會分配空間的;

c#中有垃圾自動**機制 即 gc ,不用你去釋放空間,

但是 系統沒有定義 具體的 **時間 ,如果你想主動的控制垃圾**時間,可以重寫 dispose方法,然後呼叫

使用mfc的應用程式,如果某個按鈕的處理函式一直在執行迴圈做某一個任務,那還能響應其它的訊息嗎?

7樓:匿名使用者

如果的確是在執行while迴圈的話,確實不能再被響應了。函式不結束也的確無法返回。

要響應其他訊息的話也做不到。

但是很多情況下如果有需要大量處理的資料要使用while迴圈的話,完全可以另開一個執行緒去處理。沒有必要堵塞主執行緒。 而且很多while是可以被避免的,具體還是要看你實際應用。

8樓:海盜船長娘娘

用執行緒來做while,就能響應其他訊息了。

9樓:聊無無

哈,mfc都忘光了。現在更多的偏向於.net和wpf。

但是按照目前的設計思路而言,這樣的while迴圈處理訊息應該單獨開一個執行緒進行監聽。這樣不會影響主執行緒和其他執行緒。監聽執行緒接受到了訊息後,mfc應該是使用函式指標來進行**,這個有些記不住了,拿不準。

此外,如果將訊息監聽執行緒設定為前臺執行緒,那麼即使程式關閉(主執行緒關閉)那麼這個執行緒仍然存在,同樣程式的程序也存在,除非程式中做了處理(超時或者接受到了訊息後的後續處理)或者直接結束程序(工作管理員kill程序)。如果設定為後臺執行緒,那麼只要主執行緒關閉,監聽執行緒也自動關閉。

10樓:又一雨花落

您好!生活總是驚人地相似。我也想用mfc編寫電機的控制軟體,通過不斷檢測編碼器位置來控制電機執行。

也遇到迴圈卡死的問題。想問您最後是怎麼解決的?是開闢了新執行緒嗎?

萬分感謝!!!誠盼回覆

mfc中那個函式可以把一個物件給銷燬掉呀,要不然的話,create就不能多次用了!求給個函式!

11樓:匿名使用者

普通的類物件是通過new建立,delete來刪除。

如果是系統資源,比如訊號量,互斥量等等,需要藉助相關的closehandle等釋放掉系統資源之後再delete。因此,一般的類的解構函式裡都會有資源釋放處理。有的是通過dispose方法呼叫之類。

12樓:相思丶貓

你這個物件是什麼物件?

怎麼改變應用程式的圖示,怎樣改變應用程式中的圖示

2 右鍵圖示,點選 屬性 如圖所示 3 點選如圖所示的 更改圖示 4 在彈出的視窗中,選擇右上角的 瀏覽 然後選擇自己喜歡的圖示5 選擇好之後點選確定即可 6 回到桌面,可以看到圖示已經修改了 你知道怎麼改變手機軟體的圖示嗎,快來學習一下 右擊所要更改的應用程式圖示,然後點屬性快捷方式下面有更改圖示...

在Windows中,為了啟動應用程式,下列操作正確的是

b是完全正確的,其它幾個自己試試看就知道了會發生什麼情況 b.用滑鼠雙擊該應用程式圖示 b 雙擊啟動 1 你是考試找答案吧 選擇 b 在windows中,下列操作可執行一個應用程式的是哪個?二 多選題 1 在windows中,可以使用 的方法啟動一個windows應用程式。a 雙擊 a 雙擊桌面的快...

如何在非mfc應用程式(如win32控制檯程式設計)中使用m

1.除了要包含必須的標頭檔案,關鍵是要選擇正確的mfc執行庫連結方式 project setting general use mfc in a shared dll 2.這是一個自定義物件兩種持久化方式比較的測試例子 include mfc core and standard components ...