关于TBB / C代码的问题
作者:互联网
我正在阅读线程构建块书.我不明白这段代码:
FibTask& a=*new(allocate_child()) FibTask(n-1,&x);
FibTask& b=*new(allocate_child()) FibTask(n-2,&y);
这些指令意味着什么?类对象引用和新工作在一起?谢谢你的解释.
以下代码是此类FibTask的定义.
class FibTask: public task
{
public:
const long n;
long* const sum;
FibTask(long n_,long* sum_):n(n_),sum(sum_)
{}
task* execute()
{
if(n<CutOff)
{
*sum=SFib(n);
}
else
{
long x,y;
FibTask& a=*new(allocate_child()) FibTask(n-1,&x);
FibTask& b=*new(allocate_child()) FibTask(n-2,&y);
set_ref_count(3);
spawn(b);
spawn_and_wait_for_all(a);
*sum=x+y;
}
return 0;
}
};
解决方法:
new(pointer) Type(arguments);
此语法称为placement new,它假定已经分配了位置指针,然后只在该位置调用Type的构造函数,并返回Type *值.
然后取消引用此类型*以提供类型& ;.
如果要使用自定义分配算法,则使用Placement new,如您正在阅读的代码(allocate_child())中所示.