class P{
int m;
public :
P(const int& x) : m(x){
printf("P(const int& x) x = %d this_thread = %X pos = %X\n",x,this_thread::get_id(),this);
}
P(const P& p): m(p.m){
printf("P(const P& p) x = %d this_thread = %X pos = %X\n",p.m,this_thread::get_id(),this);
}
~P(){
printf("~P() this_thread = %X pos = %X\n",this_thread::get_id(),this);
}
};
void func(const P& pp){
printf("chile th id = %X pp's pos = %X\n",this_thread::get_id(),&pp);
}
int main(){
cout<<"-->main begin<--\n";
cout<<"main id = "<<this_thread::get_id()<<endl;
P pp(1);
thread p1(func,pp);
p1.detach();
cout<<"-->mian end<--\n";
return 0;
}
-->main begin<--
main id = 1
P(const int& x) x = 1 this_thread = 1 pos = 62FE08
P(const P& p) x = 1 this_thread = 1 pos = 62FDA0
P(const P& p) x = 1 this_thread = 1 pos = DE1A38
~P() this_thread = 1 pos = 62FDA0
chile th id = 2 pp's pos = DE1A38
~P() this_thread = 2 pos = DE1A38
-->mian end<--
~P() this_thread = 1 pos = 62FE08
这里对象 怎么 创建的 , 首先pp创建了 调用了const int& 构造 , 然后 P 为什么 会在 主线程 中被 **拷贝两次 **, 这两次 为什么 拷贝 , 我觉得 首先 如果 这个 函数 如果不是线程 函数 入口的 话, 那么 这里 就应该 **出现一次 **const int& 的 构造 调用, 因为 引用 底层 也就是 指针 , 传参数 传的 是地址值(大概可以这么理解吧,意思就是 同一份东西), **那么这里 多出来的 两个拷贝 是 干什么的 **, 其次 就是 最后 一个 拷贝的(0xDE1A38) 对象 在 主线程中创建,子线程 中被销毁(这里我觉得没问题,主线还没消失,内存还在), 然后 第二个 对象(0x62FDA0) 比 第一个先销毁(在 主线程 中)不理解, 第一个 对象 为什么 ,主线 都结束了 , 他还能在 主线 中 被销毁 !!??