[問題] 有寫法可以確定不會被RVO介入嗎?

看板C_and_CPP作者 (小嫩)時間9年前 (2016/05/28 08:02), 編輯推噓0(0010)
留言10則, 2人參與, 最新討論串1/1
http://ideone.com/V97HkZ 一開始在測試std::async的時候無意間發現 如果沒有接return value跟有接return value的話 行為有差異 有接: 不會block在那行直接往下走(async) 沒接: 就直接卡在那直到thread做完 以上結論讓我想了一下, 姑且不知道它內部怎麼實做 但 為什麼它有能力可以判斷 有接 or 沒接 我自己的想法是 如果有接, 也許它會走future的move cstr(or move =) 可能可以在解構的時候判斷是否被move過 move的話就 detach, 沒move的話就就join... 但這件事如果RVO的話 根本不保証它會有move產生... 所以問題就是 1. 有沒寫法一定可以讓RVO無效 2. 有沒有好的寫法可以判斷 有接跟沒接這兩種case? 3. 我看了一下vc跟g++的 future dstr都是空的沒做事...表示我一開始的想法都是錯的 到底它怎麼做到這行為的呢? 謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 180.218.186.168 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1464393764.A.E54.html

05/28 09:33, , 1F
你錯了
05/28 09:33, 1F

05/28 09:35, , 2F
會不會卡住,的確跟有沒有接住async的return value有關
05/28 09:35, 2F

05/28 09:35, , 3F
但是判斷的方法跟move完全沒關係
05/28 09:35, 3F

05/28 09:36, , 4F
他們都是在future的destructor裡面判斷的
05/28 09:36, 4F

05/28 09:37, , 5F
vc++ future的destructor的確是空的,但你有看過他繼承
05/28 09:37, 5F

05/28 09:37, , 6F
的class了嗎(_State_manager)?
05/28 09:37, 6F

05/28 09:42, , 7F
另外,根據標準,從C++14之後,只有async產生的future,
05/28 09:42, 7F

05/28 09:46, , 8F
會在destructor block(假設還沒ready)
05/28 09:46, 8F

05/28 09:46, , 9F
而且該future必須獨自擁有這個shared state
05/28 09:46, 9F

05/28 11:06, , 10F
了解,但光靠解構子 怎麼能知道有沒有被變數接呀?
05/28 11:06, 10F
文章代碼(AID): #1NIE0avK (C_and_CPP)