請問,C/C++語言中,delete 指令 的疑問!!

希望C/C++程式不錯的大大 可以指點一下^^

請問,C/C++語言中,

問題一:

在自己宣告的"class中",

如果沒有用到new 指令,

是不是就不用另外寫一個該class的 "解構函數"

也就是說,用delete指令,

就可以把 (指標所指的) 物件所佔用的記憶體歸還??

問題二:

怎麼知道delete是不是真的把記憶體歸還給系統了呢??

比如,

宣告了一個class A

A* ptr = new A;

但是,小弟執行了

delete ptr;

為什麼還是讀的到 "原來ptr所指物件的資料??"

還是說,該記憶體區塊其實已經被歸還給 系統了

只是資料未被清除,

所以仍可以存取??

這個觀念有沒有錯誤呀??

但要 怎麼知道 delete是不是真的把記憶體歸還給系統了呢??

希望程式不錯的大大 可以指點一下,

謝謝囉!! :)

1 Answer

Rating
  • Lv 7
    2 decades ago
    Favorite Answer

    一般來講如果你的class裡沒有指標變數的話就不用寫”解構函數”(destructor). 有時候雖然你沒在class裡用new, 但是還是要寫”解構函數”(destructor).例:class s{private:   char *a;public:   s(char *str) : a(str) {}};int main(){  s b(strdup(“hello world”));}這程式雖然無new但是如果沒寫”解構函數”(destructor)去把a指向的記憶體空間還給系統的話. a指向的記憶體空間就變成孤兒了. 這樣不好.大部分的Compiler(VC++, Dev-C++等等)在delete執行之後只不過把記憶體空間還給系統而已. 並不會碰記憶體空間裡的值. 就像在用new時. new傳回來的記憶體空間裡的值是亂數. 這就是為何你要有”建構子”(constructor)的關係了. 如此做是為了省時. 不過在有的Compiler裡你可以設定環境變數讓delete之後記憶體空間裡的值會被改成某個值. 這樣方便找你程式裡漏掉的記憶體空間(沒delete)或delete兩次的記憶體空間.試試看你能不能存值到已經delete過的記憶體空間… :)懂不懂?不懂請再問

    Source(s): Myself
Still have questions? Get your answers by asking now.