作者dreamboat66 (小嫩)
看板C_and_CPP
標題[問題] 有寫法可以確定不會被RVO介入嗎?
時間Sat May 28 08:02:41 2016
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
→ Caesar08: 你錯了 05/28 09:33
→ Caesar08: 會不會卡住,的確跟有沒有接住async的return value有關 05/28 09:35
→ Caesar08: 但是判斷的方法跟move完全沒關係 05/28 09:35
→ Caesar08: 他們都是在future的destructor裡面判斷的 05/28 09:36
→ Caesar08: vc++ future的destructor的確是空的,但你有看過他繼承 05/28 09:37
→ Caesar08: 的class了嗎(_State_manager)? 05/28 09:37
→ Caesar08: 另外,根據標準,從C++14之後,只有async產生的future, 05/28 09:42
→ Caesar08: 會在destructor block(假設還沒ready) 05/28 09:46
→ Caesar08: 而且該future必須獨自擁有這個shared state 05/28 09:46
→ dreamboat66: 了解,但光靠解構子 怎麼能知道有沒有被變數接呀? 05/28 11:06