c++中这么写threads_.emplace_back(new Thread(std::bind(&ThreadPool::threadFunc,this)));为什么正确
时间: 2024-01-15 09:04:39 浏览: 126
c++ thread
在C++中,std::bind函数可以将一个成员函数和一个对象绑定起来,生成一个可调用对象。在这个例子中,&ThreadPool::threadFunc是ThreadPool类的一个成员函数的地址,this是ThreadPool类的一个对象的地址。std::bind(&ThreadPool::threadFunc, this)的返回值是一个可调用对象,它可以调用ThreadPool类的threadFunc函数,并且可以访问this指向的ThreadPool对象的成员变量和成员函数。
在这个例子中,threads_是一个std::vector<std::unique_ptr<Thread>>类型的成员变量,它用于存储Thread类的指针。std::vector的emplace_back函数可以在vector的末尾添加一个新元素,而不需要进行复制或移动操作。new Thread(std::bind(&ThreadPool::threadFunc,this))返回一个Thread类的指针,它使用std::bind函数将ThreadPool类的threadFunc函数和this指向的ThreadPool对象绑定起来,生成一个可调用对象。这个指针被封装在std::unique_ptr中,然后通过threads_的emplace_back函数添加到vector中。
这个过程中,std::bind函数生成的可调用对象被传递给Thread类的构造函数,Thread类将这个可调用对象保存在自己的成员变量中,并在自己的线程中调用它。这样就实现了在ThreadPool类中创建多个线程,并且每个线程都执行ThreadPool类的threadFunc函数的功能。
阅读全文