thread( const thread& ) = delete; (since C++11) 默认构造函数,创建一个空的 std::thread 执行对象。 Move 构造函数,move 构造函数(move 语义是 C++11 新出现的概念,详见附录),调用成功之后 x 不代表任何 std::thread 执行对象。 初始化构造函数,创建一个 std::thread 对象,该 std::thread 对象可被 ...
thread(const thread&) = delete:拷贝构造函数被禁用,意味着thread对象不可拷贝构造;thread(thread&& x) noexcept:移动构造函数,调用成功之后,x不代表任何thread执行对象; 其构造函数的使用示例如下: #include <iostream> #include <thread> #include <chrono> using namespace std; void f1(int n) { for (...
拷贝赋值操作 [deleted] thread& operator=(const thread&) = delete; Move 赋值操作(1),如果当前对象不可 joinable,需要传递一个右值引用(rhs)给 move 赋值操作;如果当前对象可被 joinable,则会调用 terminate() 报错。 拷贝赋值操作(2),被禁用,因此 std::thread 对象不可拷贝赋值。 请看下面的例子: #in...
thread() noexcept=default; thread(thread&) =delete; thread(constthread&) =delete; thread(thread&&__t) noexcept { swap(__t); } template<typename _Callable, typename... _Args>explicitthread(_Callable&& __f, _Args&&... __args) { _M_start_thread(_M_make_routine(std::__bind_simple(...
1,std::thread 禁用了拷贝构造函数(thread(const thread&) = delete),无法被拷贝构造。 2,std::thread 禁用了拷贝赋值重载(thread& operator=(const thread&) = delete),无法被拷贝赋值。 3,std::thread 可以被移动赋值: thread&operator=(thread&&rhs) noexcept; ...
线程启动之后要等待线程结束,还是让其自主运行,当std::thread对象销毁之前还没有做出决定,程序就会终止(std::thread的析构函数会调用std::terminate()),因此,即便是有异常存在,也需要确保线程能够正确汇入(joined)或分离(detached)。 如果不等待线程汇入,就必须保证程序结束之前,访问数据的有效性。这不是一个新问题...
template<classFn,class... Args>explicitthread(Fn&& fn,Args&& ... args); &&表示既可以传入左值也可以传入右值。 (3)拷贝构造函数。 代码语言:C++ 自动换行 换肤复制 // 如果拷贝构造函数(被禁用),意味着 thread 不可被拷贝构造。thread(constthread&) =delete; ...
1,std::thread 禁用了拷贝构造函数(thread(const thread&) = delete),无法被拷贝构造。 2,std::thread 禁用了拷贝赋值重载(thread& operator=(const thread&) = delete),无法被拷贝赋值。 3,std::thread 可以被移动赋值: 代码语言:javascript 复制
explicit thread(Fn&& fn, Args&&... args); 创建std::thread执行对象,线程调用threadFun函数,函数参数为args。 void threadFun(int a) { cout << "this is thread fun !" << endl; } thread t1(threadFun, 2); 3.拷贝构造函数 thread(const thread&) = delete; ...
std::thread 赋值操作 //Move 赋值操作thread& operator=(thread&& rhs) noexcept;//拷贝赋值操作 [deleted]thread& operator=(const thread&) = delete; Move 赋值操作(1),如果当前对象不可joinable,需要传递一个右值引用(rhs)给move赋值操作;如果当前对象可被joinable,则会调用terminate() 报错。