簡體   English   中英

( this ) 和 ( std::ref(*this) ) 有什么區別

[英]What's the difference between ( this ) and ( std::ref(*this) )

我曾經以這種方式創建一個線程

std::thread(&A::Func, this);

但我發現還有另一種方式

std::thread(&A::Func, std::ref(*this));

他們之間有什么區別?

在啟動運行 class A的成員 function 的線程的上下文中,這些調用是等效的。

第一個就像

void compiler_created_on_new_thread(A * a) { a->Func(); }

第二個就像

void compiler_created_on_new_thread(A & a) { a.Func(); }

相反,如果A是命名空間,它們將是可區分的

namespace A {
    void Func(Thing *) { std::cout << "pointer"; }
    void Func(Thing &) { std::cout << "reference"; }
}

第一個將顯示“指針”和第二個“參考”

std::ref 是一個真正的引用,這意味着如果您在啟動的線程上訪問它,它也會更改另一個線程上的 object。 反之亦然。 指針也可以做到這一點,但編譯器可以以不同的方式處理。 提一句建議:您應該小心從兩個線程訪問 object 並使用 std::mutex。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM