gpt4 book ai didi

c++ - 为什么 std::allocator::construct 和 std::allocator::destroy 在元素类型上模板化?

转载 作者:可可西里 更新时间:2023-11-01 17:23:08 27 4
gpt4 key购买 nike

std::allocatorconstructdestroy成员函数根据要构造的元素的类型进行参数化:

template<class T>
class allocator
{
public:
typedef T value_type;
typedef T* pointer;

template<class U, class... Args>
void construct(U *p, Args&&... args);

template<class U>
void destroy(U *p);

...
};

这样做的理由是什么?他们为什么不选择 value_type*pointer ?好像allocator<T>应该只知道如何构造或销毁 T 类型的对象.

最佳答案

这与 allocator 的原因相同s 必须有 rebind<U> typedef:因为许多容器从不分配 T

获取链表。这些分配节点,每个节点包含一个T作为成员(member)。所以allocator s 需要能够分配一些他们不知道的类型(通过 rebind<U> )。但是,这需要一个复制操作:它需要创建一个类型为 rebind<U>::other 的新分配器。 .

最好尽可能避免这种情况。因此,对于构造和销毁,分配器需要对任何类型进行适当的操作,例如链表的内部节点类型。这也使得链表的内部节点类型有可能有Allocator::construct/destruct。作为友元函数。

关于c++ - 为什么 std::allocator::construct 和 std::allocator::destroy 在元素类型上模板化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10544014/

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