std :: thread构造函数传递指针和传递ref之间有区别吗?

时间:2015-12-17 22:52:17

标签: c++ multithreading pointers pass-by-reference member-functions

创建调用成员函数的线程时,将指针传递给当前类或传递引用是否有区别?

从下面的例子中,method1的行为与method2的行为相同吗?有什么不同吗?

class MyClass
{
public:
    MyClass(){};
    ~MyClass(){};
    void memberFunction1()
    {
        //method 1
        std::thread theThread(&MyClass::memberFunction2, this, argumentToMemberFunction2)

        //method 2
        std::thread theThread(&MyClass::memberFunction2, std::ref(*this), argumentToMemberFunction2)
    }
    void memberFunction2(const double& someDouble){};
}

1 个答案:

答案 0 :(得分:4)

不,没有差异,但请注意,只有在2015年10月WG21会议上接受LWG 2219作为缺陷报告,才能使用参考包装。*

使用this可能有助于您拥有命名对象实例而不是this,因为A a; std::thread(&A::foo, std::cref(a), 1, 2); 很容易拼写。但请考虑以下情况,在这种情况下,您希望保持良好的正确性:

std::thread(&A::foo, &(const_cast<const A&>(a)), 1, 2);
std::thread(&A::foo, &as_const(a), 1, 2);
std::thread(&A::foo, const_cast<const A*>(&a), 1, 2);

这可能比阅读更容易:

-std

*)保持不同语言方言的供应商(如GCC和Clang,带有UIActivityViewController标志)通常会考虑将缺陷应用于所有方言并“修复”实现。缺陷是“总是意味着我们现在说的方式”。