为什么 std::coroutine_handle 只引用协程(通过原始指针)而不是拥有它(通过 std::unique_ptr)?

问题描述 投票:0回答:1

我有兴趣了解设计选择背后的原因,让

std::coroutine_handle
实际上成为协程状态/框架的非所有者。

我理解(至少通常是这样?)协程的返回类型负责存储

std::coroutine_handle
,因此负责协程状态/框架的生命周期。

但是,如果

std::coroutine_handle
通过
std::unique_ptr
处理协程状态/帧(在运行时与原始指针一样高性能,不是吗?),会有什么缺点?

std::coroutine_handle
周围的可复制性就那么值钱吗?

c++ memory-management c++20 unique-ptr c++-coroutine
1个回答
0
投票

当您

await
时,
awaiter
可以通过协程句柄访问协程。 它拥有协程的所有权。

因此,如果我们添加一个拥有句柄,我们仍然需要一个非拥有句柄。

编写一个拥有协程句柄是

struct destroy_coroutine {
  void operator()(auto&& handle)const {
    handle.destroy();
  }
};
template<class T=void>
using unique_coroutine_handle = std::unique_ptr< std::coroutine_handle<T>, destroy_coroutine >;

很短。

© www.soinside.com 2019 - 2024. All rights reserved.