![](/img/trans.png)
[英]What is the difference between std::tie and std::make_tuple with std::ref arguments?
[英]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.