執筆、写下一塲流年 2018-08-08 02:24 采纳率: 50%
浏览 1510
已采纳

std::thread对象可以引用吗?

C++多线程中,明确说明std::thread对象可以移动不能拷贝,
但是有的地方有这样写道:

class X{
    std::thread &t;
public:
    explicit X(std::thread& t_) : t(t_) {}
        ...
}

std::thread t(...);
X g(t);

那么在创建g对象时不是就对t进行引用了吗?是可以这样吗?

  • 写回答

7条回答 默认 最新

  • llxmedici 2018-09-10 23:10
    关注

    都在答非所问,题主你的疑虑是既然thread只能移动不能拷贝,为什么库里面有些类的构造函数参数用了thread的引用。
    首先你要知道引用不是拷贝,引用&表示用一个新的引用变量指向这个对象,对象本身没有做任何拷贝动作,只是多了一个东西指向他,那么其实你的疑虑根本是不矛盾的,thread不支持拷贝并不代表不能引用。
    其次,为什么要用引用不用移动,移动意味着提供一种能力可以将原来的对象内容转移到新的对象里,原来的对象内容就空了(通常移动构造函数这么写),显然,如果原来的对象是个左值(如你提供的例子,t是个左值),移动是不合理的,否则移动后这个对象t被其他代码用怎么办? 其实你可以用std::move显式地让class X接受t并调用其移动构造函数,但是这个操作不合理。那么你的问题其实很简单,库函数如果不提供引用的支持,意味着它只接受右值,这对于这个库来说适用性太低了,所以非特殊情况根本不可能,提供引用是普适做法,在此基础上提供移动语义是锦上添花,对于右值来说能提高效率

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(6条)

报告相同问题?

悬赏问题

  • ¥15 写uniapp时遇到的问题
  • ¥15 vs 2008 安装遇到问题
  • ¥15 matlab有限元法求解梁带有若干弹簧质量系统的固有频率
  • ¥15 找一个网络防御专家,外包的
  • ¥100 能不能让两张不同的图片md5值一样,(有尝)
  • ¥15 informer代码训练自己的数据集,改参数怎么改
  • ¥15 请看一下,学校实验要求,我需要具体代码
  • ¥50 pc微信3.6.0.18不能登陆 有偿解决问题
  • ¥20 MATLAB绘制两隐函数曲面的交线
  • ¥15 求TYPCE母转母转接头24PIN线路板图