請問物件可以自殺嗎? |
答題得分者是:syntax
|
casper97
一般會員 發表:13 回覆:18 積分:11 註冊:2004-12-30 發送簡訊給我 |
|
syntax
尊榮會員 發表:26 回覆:1139 積分:1258 註冊:2002-04-23 發送簡訊給我 |
|
casper97
一般會員 發表:13 回覆:18 積分:11 註冊:2004-12-30 發送簡訊給我 |
感謝 syntax 大大回覆:
我有個 Class ,內含兩個 VCL 元件(TPanel , TCppWebBrowser ), 我在 TCppWebBrowser 的 OnBeforeNavigate2 事件裡下 delete this; 敘述, Compile OK 但在執行時會出現 EAccessViolation 的 Exception (vcl60.bpl), 我猜想是不是TCppWebBrowser 當時已被 delete,但還有其他觸發的事件未處理, 所造成的錯誤? 我應該如何解決呢? 3Q~~ |
Stallion
版主 發表:52 回覆:1600 積分:1995 註冊:2004-09-15 發送簡訊給我 |
最常設計的方式是把元件盤上的VCL元件直接放在FORM上面,當FORM Create時後就會連帶把其上的VCL元件也Create起來(由FORM的建構函數代勞),相對的當FORM消滅時其上存在的物件消滅也由FORM代勞影響。
現在你的Class是繼承某一種TComponent,而TPanel與TCppWebBrowser是額外附加在該Class裏的物件成員,那麼很自然的你就應該自己在該Class的建構函數(或適當的地方)裡把那兩個VCL物件new起來,而在適當時機裡或destructor裡面delete掉才是,這是一點建議;另外你在自訂的Class物件成員裏的TCppWebBrowser事件裡面delete this,我不懂你的用意為何!但是這種效果就好像被new出來的物件成員還沒正確delete掉之前,就要delete this,此時這個this指的是你自訂的Class(其Owner),當然會發生記憶體錯誤。以上為小弟對這個問題所做的認知,請參考! ===================引 用 文 章=================== 感謝 syntax 大大回覆: 我有個 Class ,內含兩個 VCL 元件(TPanel , TCppWebBrowser ), 我在 TCppWebBrowser 的 OnBeforeNavigate2 事件裡下 delete this; 敘述, Compile OK 但在執行時會出現 EAccessViolation 的 Exception (vcl60.bpl), 我猜想是不是TCppWebBrowser 當時已被 delete,但還有其他觸發的事件未處理, 所造成的錯誤? 我應該如何解決呢? 3Q~~ |
暗黑破壞神
版主 發表:9 回覆:2301 積分:1627 註冊:2004-10-04 發送簡訊給我 |
|
syntax
尊榮會員 發表:26 回覆:1139 積分:1258 註冊:2002-04-23 發送簡訊給我 |
自己不能 new 自己
但是卻可以 delete 自己 這跟你無法生出自己,卻可以自殺,是一樣的道理 PS.純舉例,不建議自殺這種行為 ===================引 用 文 章=================== 沒有 delete this 這件事。你別想太多了。 只能由你的上一層來 delete 你。 換個角度。可以自己 new 自己嗎? 不可以吧。 ===================引 用 文 章=================== 物件 new 出來,當它沒作用時,可以自己作 delete this ; 的動作嗎? 煩請各位高手不吝指教。 3Q~~ |
syntax
尊榮會員 發表:26 回覆:1139 積分:1258 註冊:2002-04-23 發送簡訊給我 |
因為你沒有貼出完整程式碼,我只能猜
所以給你一點方向 你要做物件自我消滅的功能,必需要注意 1. 物件自我消滅的位置,不可以造成重複遞回消滅,不然必死 所以解構式內不能放,除非你連解構流程也有修更配合 2. 物件一旦開始消滅流程,不可以有任何地方呼叫到他,不然也是死 所以不能放在 事件 內,因為事件是被呼叫,結束後會回到自身處理剩下的事情,但無奈你已經之 delete 這時變成存取不存在的東西, 當然就錯誤囉 OnBeforeNavigate 被呼叫完後,還會做其他事,所以一定會完蛋,出錯是正常的 你要覆寫的是 在 OnBeforeNavigate 整個過程流程中的任意一個函式,或自己的程式,並加入判斷,如已經 delete 就不再繼續 所以,要看你要做什麼,來決定在那個位置 delete 自己 |
casper97
一般會員 發表:13 回覆:18 積分:11 註冊:2004-12-30 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |