Chromium 如何安全的使用PostTask

2021-09-22 22:04:27 字數 885 閱讀 6072

官方的解釋總是最權威,有疑問看這裡或者直接看**中的說明: bind_helpers.h. 

傳值方式描述

this 或 物件指標

如果物件本身是乙個refcountedthreadsafe, 沒有問題.

如果是個裸指標,應當盡量避免,除非你可以保證它的執行緒安全.

base::unretained

注意:使用這個的前提是有其它同步機制保障物件的生命週期.

如果有其它同步機制保障物件的生命週期,可以使用unretained()傳遞非引用計數的物件.

如果是乙個非引用計數的物件,可以使用unretained()封裝起來.

base::owned

如果是臨時物件,或者擔心任務執行完成後物件可能出現洩露,可以使用owned, 表示由task

持有物件的所有權,在結束時析構它.

base::passed

如果要執行task需要傳入scoped指標,就可以使用它轉換,它也可以避免拷貝,而是類似move語義.

base::constref

類似常量引用,不希望bind過程出現拷貝,就可以使用它.

base::ignoreresult

如果task要呼叫的方法帶有返回值,而你又不關心返回值就可以使用ignoreresult來傳入物件指標.

如果這樣一直將以引用計數來使用物件豈不最為簡單,為什麼要避免引用計數?

chromium智慧型指標指引中的解釋:

還可以參考: 謹慎使用智慧型指標.

關於callback和bind對物件所有權更完整的解釋

Chromium 怎樣安全的使用PostTask

官方的解釋總是最權威。有疑問看這裡或者直接看 中的說明 bind helpers.h.傳值方式描寫敘述 this 或 物件指標 假設物件本身是乙個refcountedthreadsafe,沒有問題 假設是個裸指標,應當盡量避免,除非你能夠保證它的執行緒安全 base unretained 注意 使用...

如何學習Chromium

2 初次看到vs2010裡的幾百個工程,是不是嚇傻了,呵呵,不用著急,飯要一口一口吃 2.1 了解源 的目錄結構,了解chromium的基礎執行機制 2.2 了解依賴的庫,並對部分庫進行初步學習,所謂磨刀不誤砍柴工,這些庫都是很優秀的,值得學習 2.3 從感興趣的地方看起,譬如chromium的ui...

如何安全的使用指標?

指標安全使用的兩條規則 空指標安全使用指標的4條注意事項 一 指標不可以亂用,否則會導致程式崩潰。在使用指標之前,一定要弄清楚兩個問題 一 這個指標指向了哪兒 二 這個指標指向的那個地方是否有效?能否訪問 二 就目前來說,指標只允許指向兩個地方 1 指向變數和陣列 int n int p1 n p1...