成員函式內delete this

2021-08-19 17:10:29 字數 619 閱讀 3930

以下引用自:

成員函式呼叫delete this合法嗎?

只要你小心,乙個物件請求自殺(delete this),是可以的。

以下是我對「小心」的定義:

你必須100%的確定,this物件是用 new分配的(不是用new,也不是用定位放置 new,也不是乙個棧上的區域性物件,也不是全域性的,也不是另乙個物件的成員,而是明白的普通的new)。

你必須100%的確定,該成員函式是this物件最後呼叫的的成員函式。

你必須100%的確定,剩下的成員函式(delete this之後的)不接觸到 this物件任何一塊(包括呼叫任何其他成員函式或訪問任何資料成員)。

你必須 100%的確定,在delete this之後不再去訪問this指標。換句話說,你不能去檢查它,將它和其他指標比較,和 null比較,列印它,轉換它,對它做任何事。

自然,對於這種情況還要習慣性地告誡:當你的指標是乙個指向基類型別的指標,而沒有虛析構函式時(也不可以 delete this)。

注意:因為是在類成員函式裡面delete this的,所以在此語句以後,不能訪問任何的成員變數及虛函式,否則一定非法。

我的理解(預設為non-pod型別):

在成員函式中delete this指標

剛才在toplanguage上看到版主丟擲來的乙個問題,在成員函式中能不能delete this指標。我覺得是可以的,delete操作一般是先呼叫析構函式,再呼叫delete運算子。而且delete之後,該記憶體不會立刻被釋放,只是做個標記,告訴作業系統這塊記憶體可以被釋放掉了。至於系統什麼時候會釋...

成員函式呼叫delete this的問題

有如下程式,那麼會有什麼樣的結果?程式會崩潰麼?結果 程式執行正常,設定fun2也能夠正常執行,以下是列印出來的結果,分析 根本原因在於記憶體模型。物件裡只存有資料成員跟虛函式指標 如果有的話 而 內容則是單獨存在在另外的地方。在呼叫成員函式的時候,都會隱含傳遞乙個this指標,目的是讓當前函式知道...

在類的成員函式中呼叫delete this

在類的成員函式中能不能呼叫delete this?答案是肯定的,能呼叫,而且很多老一點的庫都有這種 假設這個成員函式名字叫release,而delete this就在這個release方法中被呼叫,那麼這個物件在呼叫release方法後,還能進行其他操作,如呼叫該物件的其他方法麼?答案仍然是肯定的,...