delete this 物件請求自殺

2021-09-06 09:39:47 字數 837 閱讀 8857

第一次見delete this的時候,沒覺得這是一項會有什麼特殊作用的技術,因此也就沒有特別關注。

昨日在source******.com上看state模式之c++實現的時候,看到它在狀態轉換的時候使用了delete this,感覺似乎還不錯。

作為一種「禁術」,使用的時候必須要相當小心才行,《c++ faq》裡提到所謂「小心」至少包括以下幾個方面:

this

物件是必須是用 

new操作符分配

的(而不是用

new,也不是用

placement new

,也不是區域性物件,也不是

global

物件);

delete this

後,不能訪問該物件任何的成員變數及虛函式(

delete this

**的是

資料,這包括物件的

資料成員以及

vtable

,不包括函式**);

delete this

後,不能再訪問

this

指標。換句話說,你不能去檢查它、將它和其他指標比較、和 

null

比較、列印它、轉換它,以及其它的任何事情;

個人認為保證以上禁忌列表基本手段可以包括:

將析構函式私有化

(如果有子類,則

protected

化,保證子類能夠正確繼承)

--以保證物件必須使用

new在堆上分配記憶體;

提供(可以在僅僅在基類中)destroy(void)

函式,裡面僅有一句delete this--以保證第三方能夠將分配的記憶體**;

(原文**:

2 4 請求物件

2.4.1.介紹 請求物件是在前端控制器,路由器,分發器,以及控制類間傳遞的簡單值物件。請求物件封裝了請求的模組,控制器,動作以及可選的引數,還包括其他的請求環境,如http,cli,php gtk。模組名可通過getmodulename 和setmodulename 訪問。控制器名可通過getco...

flask 請求物件

flask通過上下文變數request對外開放請求物件如下表 屬性或方法 說明form 乙個字典,儲存請求提交的所有表單字段 args 乙個字典,儲存通過url查詢字元傳遞的所有引數 values 乙個字典,form和args的集合 cookies 乙個字典,儲存請求的所有cookie header...

Request請求物件

一 request物件由伺服器建立,我們使用 瀏覽器訪問伺服器資源原理 二 request體系結構 其中,servlet 的service 方法引數列表是 servletrequest物件,httpservlet 的 doget 和 dopost 方法引數列表是用的 httpservletreque...