ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
一、传递临时对象作为线程参数 (1,1)要避免的陷阱 **用detach的时候不推荐用引用,不允许用指针** ``` // ThreadError.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。 // #include "pch.h" #include <iostream> #include <thread> #include <string> using namespace std; //void myprint(const int &i, char *pmybuf) void myprint(const int i, const std::string& pmybuf) { std::cout << i << std::endl; std::cout << pmybuf.c_str() << std::endl;//指针为detach时,绝对会有问题 return; } int main() { //一、传递临时对象作为线程参数 //(1,1)要避免的陷阱 //1. int mvar = 1; int &mvary = mvar; char mybuf[] = "this is test"; //thread mytobj(myprint, mvar, mybuf);//事实上存在mybuf都被回收了(main函数执行完了)系统采用mybuf转string(不可以) thread mytobj(myprint,mvar,string(mybuf));//我们可以直接将mybuf转换成string对象,这是一个可以保证在线程中用肯定有效的 mytobj.detach();//子线程和主线程分别执行 cout << "I Love You" << endl; std::cout << "Hello World!\n"; } ```