我有兴趣了解设计选择背后的原因,让
std::coroutine_handle
实际上成为协程状态/框架的非所有者。
我理解(至少通常是这样?)协程的返回类型负责存储
std::coroutine_handle
,因此负责协程状态/框架的生命周期。
但是,如果
std::coroutine_handle
通过 std::unique_ptr
处理协程状态/帧(在运行时与原始指针一样高性能,不是吗?),会有什么缺点?
那
std::coroutine_handle
周围的可复制性就那么值钱吗?
当您
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 >;
很短。