我正在阅读线程积木书。我不明白这段代码:
FibTask& a=*new(allocate_child()) FibTask(n-1,&x);
FibTask& b=*new(allocate_child()) FibTask(n-2,&y);
这些指令是什么意思?类对象引用和 new 一起工作吗?谢谢解释。
下面的代码是这个类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 ,它假定位置
pointer
已经分配,然后在该位置简单地调用 Type
的构造函数,并返回一个 Type*
值。然后这个
Type*
被取消引用以给出一个 Type&
。当您想要使用自定义分配算法时,会使用 Placement new,如您正在阅读的代码 (
allocate_child()
) 中所示。关于c++ - 关于TBB/C++代码的问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2746627/