C 中的 delete 機制剖析

2022-01-10 09:09:29 字數 527 閱讀 8204

本文簡單總結了delete放在析構函式中vs放在主函式中的區別(針對自己定義類)。

我們編譯出來的程式執行時是和作業系統打交道的,程式中用到的記憶體都向作業系統申請,在多工的作業系統下,不允許普通的程式訪問未分配的記憶體。作業系統手裡有一張表,標明記憶體中的哪些單元被哪個程式占用了,哪些是空閒的(空閒不一定是空值,我們編寫的程式如果動態變數沒有初始化往往會帶有不定值,就是這個緣故),當程式提出申請,它就把空閒的記憶體分配給程式。程式執行完後作業系統再把分配給的記憶體標記為空閒,以供其他程式用。我個人的猜測,執行delete只是將它後面變數的位址告訴給作業系統,作業系統把它手裡的那張表給改了,但delete掉的指標沒有變化,還是原來指向的變數的位址值(可以做個小實驗,new出來的delete後指標不會變,但所指向的記憶體所存放的變數可能就變了;但如果定義另外乙個指標,再將另外那個指標賦給當前指標,則delete後,所指向的記憶體所存放的變數仍然是不變的,因為只是指標的賦值,本質上還是兩個指標

)。

測試程式:

#include

intmain()

C 中delete和delete 的區別

c 告訴我們在 用 new 分配的單個物件的記憶體空間的時候用 delete,用 new 分配的一組物件的記憶體空間的時候用 delete。很多人注意到了這個問題,但是卻不清楚為什麼要這樣做,不這樣做行不行。關於 new 和 delete,其中又分為兩種情況 1 為基本資料型別分配和 空間 2 為自...

C 中delete和delete 的區別

c 告訴我們在 用 new 分配的單個物件的記憶體空間的時候用 delete,用 new 分配的一組物件的記憶體空間的時候用 delete。很多人注意到了這個問題,但是卻不清楚為什麼要這樣做,不這樣做行不行。關於 new 和 delete,其中又分為兩種情況 1 為基本資料型別分配和 空間 2 為自...

C 中的delete和delete 區別

一直對c 中的delete和delete的區別不甚了解,今天遇到了,上網查了一下,得出了結論。做個備份,以免丟失。c 告訴我們在 用 new 分配的單個物件的記憶體空間的時候用 delete,用 new 分配的一組物件的記憶體空間的時候用 delete。關於 new 和 delete,其中又分為兩種...