簡體   English   中英

將unique_ptr傳遞給函數對象

[英]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將占位符參數作為左值引用傳遞,而不是使用完美轉發。

該示例在gcc( coliru上的實時樣本)上編譯良好。

解決方法是,可以使用lambda代替std::bind

auto func2 = [&a](std::unique_ptr<Work> w) { a.doWork2(std::move(w)); };

暫無
暫無

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

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