код
FibTask& a=*new(allocate_child()) FibTask(n-1,&x);
FibTask& b=*new(allocate_child()) FibTask(n-2,&y);
создает две подзадачи этой задачи и устанавливает эту задачу в качестве преемника созданной задачи. Пространство, используемое для выделения этих задач, управляется этой задачей, когда thsi-> allocate_child () используется в качестве места размещения. Преимущество состоит в том, что эти подзадачи принадлежат этой задаче и освобождаются, когда текущая задача запускается автоматически. Обратите внимание, что это можно сделать, потому что текущая задача выполнит свою подзадачу, поскольку она зависит от них.
Это также можно записать как
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);
Использование ссылок вместо указателей вынуждает людей, которые будут поддерживать этот код, не думать, что указатели должны быть удалены. Это объяснение, которое я нашел.