在Boost库的1.50.0版本发行说明我注意到有两个重大的变动( 见这里 ):
#6266最新变化:螺纹析构函数应该调用终止,如果可连接。
#6269最新变化:螺纹移动分配应该叫终止,如果可连接。
这是什么意思为目前使用Boost 1.49.0我现有的项目? 我一定要改变什么? 如果是的话,我必须明确的改变? 会发生什么,如果我忘记修改我现有的项目之一? 我会得到编译时错误(我希望如此),或者我会变得肮脏和难以找到运行时的问题(我绝对不希望如此)?
在Boost库的1.50.0版本发行说明我注意到有两个重大的变动( 见这里 ):
#6266最新变化:螺纹析构函数应该调用终止,如果可连接。
#6269最新变化:螺纹移动分配应该叫终止,如果可连接。
这是什么意思为目前使用Boost 1.49.0我现有的项目? 我一定要改变什么? 如果是的话,我必须明确的改变? 会发生什么,如果我忘记修改我现有的项目之一? 我会得到编译时错误(我希望如此),或者我会变得肮脏和难以找到运行时的问题(我绝对不希望如此)?
当它说:“重大更改”,这意味着,“如果你依赖于行为,这是以前X你计划被打破,但现在是Y”。
对于给定的两个变化,这意味着如果你依赖析构函数或移动分配调用join()
(或detach()
我相信是以前的行为,你的程序现在必须明确地join()
或detach()
或满足你的朋友std::terminate()
这不是一个编译时错误,但也不是不可预测的运行时间behaviour-你会得到一个干净的崩溃导致右后卫boost::thread
的析构函数,这是问题的原因。
使用下面的代码才能正常工作,但与v3的节目将作为被中止t
离开其范围,因为thread::~thread
调用std::terminate
,而不是从线程默默地分离:
#include <boost/thread.hpp>
#include <iostream>
void f()
{}
int main()
{
{
boost::thread t(f);
}
std::cout << "exiting gracefully" << std::endl;
}