![](/img/trans.png)
[英]Passing the managed object of a unique_ptr by reference to a thread function
[英]Passing unique_ptr to function object
在編譯以下內容時遇到問題。 我創建了一個函數對象並嘗試傳遞唯一的指針,但是編譯器抱怨說我試圖訪問unique_ptr中的私有數據。 這發生在msvc 2012 v110中。
class Work
{
};
class A
{
public:
void doWork(Work w)
{
std::cout << " - - ";
return;
}
void doWork2(std::unique_ptr<Work> w)
{
std::cout << " - - ";
return;
}
};
int main()
{
A a;
std::unique_ptr<Work> w2 = std::unique_ptr<Work>(new Work());
Work w;
auto func = std::bind(&A::doWork, a, std::placeholders::_1);
auto func2 = std::bind(&A::doWork2, a, std::placeholders::_1);
func(w);
func2(std::move(w2));
return 0;
}
這看起來像VC中的錯誤。 另請參見Microsoft Connect上的此錯誤報告 。
似乎VC將占位符參數作為左值引用傳遞,而不是使用完美轉發。
解決方法是,可以使用lambda代替std::bind
:
auto func2 = [&a](std::unique_ptr<Work> w) { a.doWork2(std::move(w)); };
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.