gpt4 book ai didi

c++ - 解析分配器::重新绑定(bind)调用

转载 作者:太空狗 更新时间:2023-10-29 23:14:52 24 4
gpt4 key购买 nike

我刚刚学习 C++ 分配器,我正在尝试了解每个分配器中 struct rebind 的用途。例如,在 this program 中:

#include <memory>
#include <iostream>
#include <algorithm>
#include <vector>

using namespace std;

typedef vector<int>::allocator_type IntAlloc;
int main( )
{
IntAlloc v1Iter;
vector<int> v1;

//************What's going on here?********
IntAlloc::rebind<char>::other::pointer pszC =
IntAlloc::rebind<char>::other(v1.get_allocator()).allocate(1, (void *)0);

int * pInt = v1Iter.allocate(10);
}

我想了解关键线在做什么。它是否将 typedef IntAlloc 修改为现在服务器作为 char vector 的分配器?即使我猜对了,我也不确定我能不能把它分解。这是我的猜测:

IntAlloc::rebind<char> //accessing the struct rebind

`::other` //accessing data member other inside rebind

(v1.get_allocator()) //**isn't this just retrieving IntAlloc in its original form?**
///What is this for?

.allocate(1, (void *)0); //**this is allocating something? What do these parameters mean?**

最佳答案

不幸的是,这都是 C++11 之前的分配器工作,它们使用 2011 标准大大简化了事情。

struct rebind本质上是一种解决语言中没有模板化类型定义这一事实的方法,Container 需要它s 不会在内部分配与您传递给它们的分配器相同的类型。他们“重新绑定(bind)”分配器并取回一个可以分配不同类型的新分配器(例如,'std::set'分配一些'Node'类型,除了您的分配器分配的类型)。这种机制隐藏了内部结构,但肯定不漂亮。

例如,您可能有一个 Allocator<int> , 但要制作树结构,std::set需要从 Allocator<std::_Node<int>> 类型的对象分配或类似的东西。 rebind机制允许这样做。

(v1.get_allocator()) //isn't this just retrieving IntAlloc in its original form?

这是从 v1 获取分配器对象, 类型为 vector<int>::allocator_type ,所以或多或少是的。

IntAlloc::rebind<char>::other(v1.get_allocator())正在获得 char分配器,并初始化它以使用来自 vector<int> 的分配器, v1 .

关于c++ - 解析分配器::重新绑定(bind)调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31729928/

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