多线程对象性命期提问

多线程对象生命期提问
我是刚入行的小白,真心求教:
   问题描述:
     class Father
    {
     Father(){ /*构造函数*/ };
     ~Father(){ /*析构函数*/ };
    print(/*打印*/);
    };;
  void thread_work(Father& a)
  {
       a.print();    //####提问:这里为什么会调用析构?
   }
 int main()
  {
     std::thread th(thread_work);
    th.join();
 }
补充:改为 void thread_work(Father* a); 就可以了,
 原型是客户端发数据,因为调用析构,所以服务端接收到2个网络指令了,拜托大神解疑啦,感谢感谢!

还有 能不能说下这属于哪方面知识呢?

------解决思路----------------------
你线程运行的函数是怎么传递进去的呢?代码里没看到
------解决思路----------------------
代码貌似不完整
------解决思路----------------------
《Windows核心编程》
《深入解析Windows操作系统-Windows Internals》

------解决思路----------------------
引用的话由编译器根据引用计数来判断什么时候释放对象
当它发现a在调用a.print后没有再使用了,就可能触发释放操作
而对于指针,它没办法进行这样的判断
------解决思路----------------------
这个我看了汇编,他是在check stack的时调用的析构,编译器的世界太难懂。
------解决思路----------------------
std::thread mythread(rhread_work,fafa);
=>
std::thread mythread(rhread_work,std::ref(fafa));

你原来的代码传的是副本(即使函数签名是引用,建立std::thread本身的时候传进去的就是拷贝,函数参数引用的是那个拷贝)。等thread结束了当然一个析构。