請問用STL 和用 TList? |
尚未結案
|
seaphone
一般會員 ![]() ![]() 發表:5 回覆:9 積分:2 註冊:2004-07-22 發送簡訊給我 |
|
pwipwi
版主 ![]() ![]() ![]() ![]() ![]() 發表:68 回覆:629 積分:349 註冊:2004-04-08 發送簡訊給我 |
seaphone你好:
vector的記憶體配置是連續的實體空間。TList則是array of pointers,pointer才指向實體。另外還要提一點,TList的個數是有上限的: MaxListSize = Maxint div 16; 如果單就記憶體的配置方式來看,vector比較不容易出錯。不過我想TList也是很穩定的,只是要小心指標的使用。另外如果有multiple thread的話,也要改用thread safe的List。
至於選用那一個…如果你存的資料是單純性的固定大小結構,用vector是比較適合的。但如果有用多型或是vcl的class,那TList是很方便的。以你的狀況,建議用vector。(TPoint只是單純的結構)速度和效能都比較好。參考一下
|
seaphone
一般會員 ![]() ![]() 發表:5 回覆:9 積分:2 註冊:2004-07-22 發送簡訊給我 |
引言: seaphone你好: vector的記憶體配置是連續的實體空間。TList則是array of pointers,pointer才指向實體。另外還要提一點,TList的個數是有上限的: MaxListSize = Maxint div 16; 如果單就記憶體的配置方式來看,vector比較不容易出錯。不過我想TList也是很穩定的,只是要小心指標的使用。另外如果有multiple thread的話,也要改用thread safe的List。 至於選用那一個…如果你存的資料是單純性的固定大小結構,用vector是比較適合的。但如果有用多型或是vcl的class,那TList是很方便的。以你的狀況,建議用vector。(TPoint只是單純的結構)速度和效能都比較好。參考一下 |
pwipwi
版主 ![]() ![]() ![]() ![]() ![]() 發表:68 回覆:629 積分:349 註冊:2004-04-08 發送簡訊給我 |
|
seaphone
一般會員 ![]() ![]() 發表:5 回覆:9 積分:2 註冊:2004-07-22 發送簡訊給我 |
引言: 其實我的原意是…兩個都很穩定。 大部分的問題其實都是我們使用者的bug,不然就是使用上的錯誤。 選擇上只是在效能與使用方便上做考慮。 另外如果程式跑起來不穩定的話, 最好還是重新考慮使用的資料結構。 可以不用指標做到的功能,就不要用到他。 如果有用到指標,最好也都用smart pointer包裝,減少自已出錯的可能。 以上僅是參考.. |
pwipwi
版主 ![]() ![]() ![]() ![]() ![]() 發表:68 回覆:629 積分:349 註冊:2004-04-08 發送簡訊給我 |
seaphone你好:
smart pointer的內容不少,相關的議題也很多。我只能提一些方向讓你看看。
現在存在於Cplusplus標準裡的,只有一種smart pointer。宣告在memory裡面。名稱是auto_ptr。此外在下一版的標準,預訂會加入share_ptr。
auto_ptr與share_ptr功能不同,要注意的地方也不少。使用上特別要注意不要把auto_ptr和STL的容器合用,會出問題。share_ptr現在還不是標準C裡有的,不過已經存在boost的library裡面。(找一下boost的網站,就可以下載)實作上share_ptr用的方法是運用了reference count(如果我沒記錯的話)。相當安全而且好用,與STL合用也可以正常運作。建議如果不知道選那種smart pointer來用的時候,就用share_ptr。 smart_ptr的用法如下,以auto_ptr為例:
#includeFileList在函式結束時會自動delete。而且更有趣的是,如果函式中有丟出exception,FileList還是可以正常的delete。但如果你用pointer來做的話,還要寫個try.catch才能安全的delete pointer的內容。因此運用smart pointer可以方便解決exception丟出時常有的memory leakage問題。省去一堆try..catch。 以上只是個簡單的例子,相關的進階用法,就需要你自已去挖囉。 |
seaphone
一般會員 ![]() ![]() 發表:5 回覆:9 積分:2 註冊:2004-07-22 發送簡訊給我 |
引言: seaphone你好: smart pointer的內容不少,相關的議題也很多。我只能提一些方向讓你看看。 現在存在於Cplusplus標準裡的,只有一種smart pointer。宣告在memory裡面。名稱是auto_ptr。此外在下一版的標準,預訂會加入share_ptr。 auto_ptr與share_ptr功能不同,要注意的地方也不少。使用上特別要注意不要把auto_ptr和STL的容器合用,會出問題。share_ptr現在還不是標準C裡有的,不過已經存在boost的library裡面。(找一下boost的網站,就可以下載)實作上share_ptr用的方法是運用了reference count(如果我沒記錯的話)。相當安全而且好用,與STL合用也可以正常運作。建議如果不知道選那種smart pointer來用的時候,就用share_ptr。 smart_ptr的用法如下,以auto_ptr為例:#includeFileList在函式結束時會自動delete。而且更有趣的是,如果函式中有丟出exception,FileList還是可以正常的delete。但如果你用pointer來做的話,還要寫個try.catch才能安全的delete pointer的內容。因此運用smart pointer可以方便解決exception丟出時常有的memory leakage問題。省去一堆try..catch。 以上只是個簡單的例子,相關的進階用法,就需要你自已去挖囉。 |
pwipwi
版主 ![]() ![]() ![]() ![]() ![]() 發表:68 回覆:629 積分:349 註冊:2004-04-08 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |