创建调用成员函数的线程时,将指针传递给当前类或传递引用是否有区别?
从下面的例子中,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){};
}
答案 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
标志)通常会考虑将缺陷应用于所有方言并“修复”实现。缺陷是“总是意味着我们现在说的方式”。