上一篇(C++并发与多线程(4) | 传递临时对象作为线程参数的一些问题Ⅰ-CSDN博客)提出了传递临时对象作为线程参数的问题,本节借助一个线程ID的概念来更好地理解。
一、线程ID
概念:
ID是每个线程(不管是子线程还是主线程)对应的一个数字,每个线程的ID都不同。
获取线程ID的方法:
std::this_thread::get_id()
二、临时对象时机捕获
找出临时对象是在哪里构造的,是在主线程中还是子线程中?
修改之前的代码,加入部分打印线程ID的代码语句:
#include<iostream>
#include<thread>
using namespace std;
class A
{
public:
int m_i;
//类型转换构造函数,可以把一个int转换成一个类A对象
A(int a) :m_i(a) {
cout << "[A::A(int a)构造函数执行]" << this << "thread_id = " << std::this_thread::get_id() << endl;
}