传递临时对象作为线程参数
void myprint(const int i, char *buf )
{
cout << i << endl; //这里myvar不是主线程中的具体变量的地址了,是一个复制值,没有问题。
cout << buf << endl; //陷阱1:指针传入参数地址不再是入参的地址了,这里打印是存在问题的。解决
//办法字符串通过const string& 临时变量作为参数实现数据传递。但是
//char型的mybuf什么时候转const string是一个非常重要的问题,是存在
//mybuf存在主线程执行完毕,才会出现将数据复制到const string类型的转换
//这种方式是不稳定的。方法是在入参是直接通过string(mybuf)方式提前进行
//数据转换
}
int main()
{
int mvar = 1;
char buf[] = "Hello world";
thread myobj(myprint, myvar, mybuf );
myobj.detach();
return 0;
}
总结,传递过程直接使用赋值传递,不使用引用传递。如果传递类对象,直接使用对象临时构造一个Class()来通过临时对象构建传递到函数中。函数传递收函数接口中使用类的应用方式吸收变量,不是使用临时变量类来吸收类。



