這個問題迷惑著我,我在csdn上發帖子,得到了很好的解決。這是我第一次在csdn上發帖子,csdn果然是n多大牛.
先看**:
問題是為什麼執行delete這條語句會導致虛構函式無限遞迴?
感謝網友arcticanimal,他給出了明確的兩點解釋:
1). delete 操作符會被編譯器展開為至少兩個子過程
1. 呼叫所傳入型別的析構函式(如果是虛析構函式,之後還會去呼叫子類的析構函式)
2. 呼叫記憶體銷毀函式,釋放所傳入指標指向的記憶體
對非動態分配的物件呼叫delete,第乙個過程是不會有問題的,但是第二個過程就會讓你的程式掛掉
樓主的**在析構函式中呼叫delete,會在第乙個子過程中形成無限遞迴,不會執行到第二個子過程。所以樓主的**會正常的無線遞迴。
2). 偽**清晰的解釋了導致遞迴的原因
Js中delete關鍵字
用來刪除物件的屬性,還可以用來使用var宣告變數 delete關鍵字有返回值,豔紅來表示刪除屬性是否刪除成功 true false 如果刪除的是不存在的屬性,則返回的是true var 變數名 delete 物件名.屬性名 案列 var obj console.log obj.name 張三 var...
C C 中的關鍵字
c c 中的關鍵字 c c 中的關鍵字如下 注 上表中為c 98 03中的63個關鍵字,其中紅色標註為c語言中的32個關鍵字。c 11中有73個關鍵字,新增加的10個為 alignas alignof char16 t char32 t constexpr decltype noexpect nul...
C C 中volatile關鍵字
c c 中volatile關鍵字 1 沒有volatile關鍵字 include stdio.h void main void b i printf d n b getchar 然後,在 debug 版本模式執行程式,輸出結果如下 i 10 i 32 然後,在 release 版本模式執行程式,輸出...