使用std::shared_ptr和std::线程时编译错误

Compiler error using std::shared_ptr with std::thread

本文关键字:std 编译 错误 线程 ptr shared 使用      更新时间:2023-10-16

我正在尝试使用Test类的shared_ptr启动线程,并且我得到此错误:

/usr/lib/gcc/x86_64-pc-linux-gnu/4.7.3/include/g++-v4/functional:559:2: note: no known conversion for argument 1 from 'std::shared_ptr<Test>' to 'std::shared_ptr<Test>&'

示例代码:

    std::shared_ptr<Test> test = std::make_shared<Test>();
    std::thread th(&Test::run, test); // Compiler error

    Test* test2 = new Test;
    std::thread th(&Test::run, test2); // okay

注意:在windows与VS2013工作良好第一个例子。

这看起来像是您正在使用的gcc版本中的一个错误,因为它应该可以工作。看看http://ideone.com/GOQ35M它确实可以

作为一种变通方法,您可以尝试
std::shared_ptr<Test> test = std::make_shared<Test>();
std::thread th(std::bind(&Test::run, test))