Re: [問題] 困擾的thread in vector

看板C_and_CPP作者 (╮(╯3╰)╭)時間15年前 (2009/02/02 20:45), 編輯推噓2(205)
留言7則, 5人參與, 最新討論串2/2 (看更多)
: 推 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)

02/02 21:47, , 1F
傳參考, 不會複製(書上寫的)
02/02 21:47, 1F

02/02 21:58, , 2F
是我的錯,vector<&CThd> 不會傳reference進去
02/02 21:58, 2F

02/02 22:08, , 3F
不過我也覺得很奇怪的是push_back(T &) 就是定義ref了...
02/02 22:08, 3F

02/02 22:47, , 4F
參數列的reference只是避免了一次無謂的複製,進去函式之後
02/02 22:47, 4F

02/02 22:48, , 5F
vector底層會參考你傳進去物件(的reference),自己複製複本
02/02 22:48, 5F

02/02 23:15, , 6F
可以傳Pointer進去吧,只是要自己delete
02/02 23:15, 6F

02/03 09:54, , 7F
感謝cackle的補充
02/03 09:54, 7F
文章代碼(AID): #19XkhXWC (C_and_CPP)
文章代碼(AID): #19XkhXWC (C_and_CPP)