1. 程式人生 > >c++ 類成員函式內刪除this指標

c++ 類成員函式內刪除this指標

問題1:成員函式內能不能delete this。

但從編譯來說, 都是可以的。 但從執行中, 又得分情況來看。

1.  解構函式內呼叫delete this。

這是一定不行的, 解構函式內呼叫delete this 可以理解為 函式無終止條件自我遞迴呼叫, 最終導致棧溢位。(注意, 這裡無論解構函式是否是虛擬函式, 最終都是因為

2. 除解構函式外其他函式。

可以的, 你甚至可以在建構函式裡呼叫delete this。 許多老一點的庫程式碼裡都有類似releasexxx()或者是recycleself()的函式, 裡面大多幹了這個事情。

問題2: 在成員函式裡呼叫delete this要注意什麼?

呼叫了delete this 之後, 你並不是啥都不能做。 只是注意不要在使用成員變數或者虛成員函式。如果使用成員變數你大多會得到一個隨機值,而如果呼叫虛擬函式的話, 由於虛擬函式表亂了, 最終會導致函式地址錯誤,進而掛掉。

呼叫該函式的物件只能是存在於堆中的(也就是new出來的)。原因也很簡單, 棧內的物件生存週期結束後會自動再次呼叫解構函式, 造成重複釋放同一片地址。

注意: 虛解構函式裡呼叫delete 掛掉的原因是棧溢位而不是虛擬函式表亂了。 原因是解構函式一直沒呼叫完, 所以物件空間一直還沒被釋放。