gpt4 book ai didi

c++ - std::packaged_task 的分配器构造函数

转载 作者:行者123 更新时间:2023-11-28 04:44:06 25 4
gpt4 key购买 nike

std::packaged_task 模板有一个接受分配器的构造函数:

packaged_task pt {allocator_arg_t, a, f};

我想问:

1) 它的存在表明 packaged_task 对象可能需要内存来存储数据。对于容器(例如: vector ),这种要求是显而易见的。但是,packaged_task 不是容器。

如果“f”(作为参数传递给 packaged_task 的任务)需要空间,则提供该空间的责任是“f”而不是 packaged_task(否则“f”不会在 packaged_task 之外运行) ).

因此,为什么 packaged_task 需要这个构造函数?

2) 什么是 allocator_arg_t 参数,为什么需要它以及如何使用它?

3) 是否有(简单的)用法示例?

最佳答案

此分配器感知重载已从 C++17 开始删除。

packaged_task存储 f 的拷贝, 用 std::forward<F>(f) 初始化.存储是使用分配器 a 分配的.此拷贝是必要的,因为 packaged_task可能比原来的要长寿f .

std::allocator_arg_t 纯粹用于消除构造函数重载的歧义。要选择分配器感知构造函数,您传递 std::allocator_arg 作为第一个参数。

一个例子(live):

#include <future>
#include <iostream>
#include <memory>

int one() noexcept {
return 1;
}

int main() {
std::packaged_task<int()> task(std::allocator_arg, std::allocator<void>{}, one);
task();
std::cout << task.get_future().get() << std::endl;
}

输出是1 .

关于c++ - std::packaged_task<T> 的分配器构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49606927/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com