delete 會自動判斷資料型態嗎? |
答題得分者是:pwipwi
|
dllee
站務副站長 發表:321 回覆:2519 積分:1711 註冊:2002-04-15 發送簡訊給我 |
new delete 雖然每天在用,但最近想到一個問題,如:
TList 我們可以 new 一些物件放入,如果是同樣的物件,如 TMemoryStream則: 建構/使用/解構大致如下:
TList *MyList; TForm1::TForm1 { MyList=new TList; } TForm1::Add() { TMemoryStream *stm=new TMemoryStream; MyList->Add(stm); } TForm1::~TForm1 { for(int i=0;i平常我也都是這樣用的。 但解構的部分是否可以這樣 TForm1::~TForm1 { for(int i=0;i若是則: TList *MyList; TForm1::TForm1 { MyList=new TList; } TForm1::AddA() { TMemoryStream *stm=new TMemoryStream; MyList->Add(stm); } TForm1::AddB() { TMyClass *cls=new TMyClass; MyList->Add(cls); } TForm1::~TForm1 { for(int i=0;i可以這樣嗎? 沒空更新的網頁... http://dllee.ktop.com.tw C及指標教學,計算機概論,資訊管理導論... http://dllee.adsldns.org 介紹Shells,LiteStep,GeoShell....
------
http://www.ViewMove.com |
Windyboy
版主 發表:7 回覆:119 積分:210 註冊:2002-11-07 發送簡訊給我 |
|
pwipwi
版主 發表:68 回覆:629 積分:349 註冊:2004-04-08 發送簡訊給我 |
引言:dllee你好: 這樣的結果應該是不行的。 delete的動作包含了呼叫destructor和使用operator delete 第一步要呼叫destructor時,就會出錯了。 因為void指標無法完成virtual所需要的動作。 (不過operator delete倒是可以接受void指標。) 要是用TList *MyList; TForm1::TForm1 { MyList=new TList; } TForm1::AddA() { TMemoryStream *stm=new TMemoryStream; MyList->Add(stm); } TForm1::AddB() { TMyClass *cls=new TMyClass; MyList->Add(cls); } TForm1::~TForm1 { for(int i=0;i可以這樣嗎? delete dynamic_castdelete其base class指標理論上應該就可行了~ 不過我沒測式過... 發表人 - pwipwi 於 2004/05/13 17:32:55 |
hao_chih
一般會員 發表:15 回覆:25 積分:18 註冊:2003-09-10 發送簡訊給我 |
|
dllee
站務副站長 發表:321 回覆:2519 積分:1711 註冊:2002-04-15 發送簡訊給我 |
由 axsoft 大大所提到的
http://www.bytamin-c.com/articles/Tlvist.htm
指出,還是需要指定型別才行。
而我用的別人的元件是可以「自己」幫我delete,而我來本以為它是騙人的,後來寫了個自己的元件放入其 List 內,在不用時,真的會叫到我自定的解構元,這表示,系統運作要如同 pwipwi 的說法才能達到。 沒空更新的網頁...
http://dllee.ktop.com.tw C及指標教學,計算機概論,資訊管理導論... http://dllee.adsldns.org 介紹Shells,LiteStep,GeoShell....
------
http://www.ViewMove.com |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |