作者montreal (╮(╯3╰)╭)
看板C_and_CPP
標題Re: [問題] 困擾的thread in vector
時間Mon Feb 2 20:45:20 2009
: 推 jlovet:方法一改成 vector<CThd &> vec; 放reference看看 02/02 18:40
: → jlovet:我猜是你放object進去vector是會複製一份... 02/02 18:40
謝謝 jlovet 兄
一語道破我的盲點
vector<CThd> vec;
vec.push_back(
CThd());
也就是說 CThd() 產生一個物件,並在建構子開啟一個 thread
然後複製了一份新的 CThd 物件傳給 vector 並在該建構子開啟了另一個 thread
所以系統裡面存在著兩個 thread,一個可控制、另一個不受控制…(真要命)
改善的方法很簡單,把 CreateThread 移出建構子即可。
不過 vector<CThd &> vec 有點懷疑,可以這樣嗎 QQ?
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 219.87.64.222
※ 編輯: montreal 來自: 219.87.64.222 (02/02 20:57)
1F:→ tsaiminghan:傳參考, 不會複製(書上寫的) 02/02 21:47
2F:推 jlovet:是我的錯,vector<&CThd> 不會傳reference進去 02/02 21:58
3F:→ jlovet:不過我也覺得很奇怪的是push_back(T &) 就是定義ref了... 02/02 22:08
4F:推 cackle:參數列的reference只是避免了一次無謂的複製,進去函式之後 02/02 22:47
5F:→ cackle:vector底層會參考你傳進去物件(的reference),自己複製複本 02/02 22:48
6F:→ DarkNT:可以傳Pointer進去吧,只是要自己delete 02/02 23:15
7F:→ montreal:感謝cackle的補充 02/03 09:54