解析 allocator::rebind 调用

2023-12-28

我刚刚学习 C++ 分配器,我试图理解的目的struct rebind在每个分配器中。例如,在这个程序 https://msdn.microsoft.com/en-us/library/5fk3e8ek.aspx:

#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不会在内部分配与您传递给它们的分配器相同的类型。它们“重新绑定”分配器并返回一个可以分配不同类型的新分配器(例如,“std::set”分配一些“Node”类型,该类型具有指向树结构的其他节点的指针,此外还有一个对象您的分配器分配的类型)。这种机制隐藏了内部结构,但肯定不漂亮。

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

(v1.get_allocator()) //这不是只是以原始形式检索 IntAlloc 吗?

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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

解析 allocator::rebind 调用 的相关文章

随机推荐

  • Android WebView:在Android客户端上传图像。无法在服务器端 JavaScript 中获取文件类型

    我已经测试了 stackOverFlow 上的所有可用代码 但仍然无法正常工作 我使用Android 4 4 4并使用WebView将图像上传到服务器网页 但无法在服务器JavaScript代码中获取文件类型 alert type inpu
  • 如何将字符串转换为布尔值

    我有一个string可以是 0 或 1 并且保证不会是其他任何东西 所以问题是 将其转换为最佳 最简单和最优雅的方法是什么 bool 确实很简单 bool b str 1
  • 使用 HTTP 上传文件。收到错误:- HttpSendReuest 12005

    我想使用 HTTP 将 D er txt 上传到网络服务器 当我运行程序时 我收到 HttpSendRequest 12005 错误 我在我的网络服务器上使用了一个 PHP 脚本 它将接受该文件并将其存储在名为 upload 的预制目录中
  • 持久“记住我”Cookie 的竞争条件

    根据持久登录 Cookie 最佳实践 http fishbowl pastiche org 2004 01 19 persistent login cookie best practice 您不应该允许多次使用 记住我 令牌 持久性 coo
  • 由于未知表而无法删除表(错误 1051)

    我正在尝试从我继承的架构中删除一个表 当我SHOW TABLES I get Tables in schema a table 1 table 2 table 3 table 4 table 5 table 6 但是当我执行时
  • 领域 + NSTableView + NSArrayController

    我的 macOS 应用程序有一些问题 希望您能帮助我 我对 macOS 还很陌生 所以请多多关照 应用程序的一部分由一个简单的 NSTableView 组成 其内容绑定到 NSArrayController NSArrayControlle
  • Apache poi:删除 XWPFDocument 中的图片

    我正在编写一个应用程序 它采用带有一堆空段落和表格的 docx 文件 并使用 Apache POI 和数据库中的数据以编程方式填充它们 我提供的 docx 模型中还包含一系列图片 我的问题是我想删除不需要的图片 再次以编程方式 我看到有一种
  • TextMate 语法——规则的优先级

    我正在尝试修改 CSharp 语言的语法突出显示 因此我将在 C 字符串中获得 SQL 的语法突出显示 TextMate 支持嵌入语言 因此这似乎是可能的 我建立在csharp tmLanguage json https github co
  • 在 git 中交换暂存和未暂存更改的最短方法是什么?

    如果有一些更改添加到索引中 而有一些更改未添加到索引中 我如何交换这两组更改 它认为这对于临时提交来说是最容易做到的 当您有暂存和未暂存的提交时 在尝试对更改重新排序时可能会发生冲突 对分阶段的更改进行提交 创建一个分支供以后使用 git
  • 如何在 OpenAPI / Swagger 中递归引用封闭类型定义?

    我正在 Swagger 编辑器中编写 OpenAPI 定义 我的类型定义之一包含一个数组 其中包含与父元素类型相同的子元素 IE 像这样的东西 definitions TreeNode type object properties name
  • Centos 7 / Apache / PHP - mkdir():权限被拒绝

    在你大喊重复之前 并将我放逐至深渊 听我说完 我一直在为我工作的公司开发一个内联网站点 最初我是直接从运行的工作站上开发它Windows 7 IIS 当我接近完成网站 应用程序时 我得到了Centos 7正在运行的盒子Apache 所以我已
  • 定期刷新网页

    我的要求是我有一个 php 页面 必须根据数据库中的数据显示一些图形 数据 我想自动并定期刷新页面 以便可以更新图形 数据 因为数据仅在加载页面时获取 我怎样才能做到这一点 也许你可以尝试 setTimeout javascript 方法
  • 使用正则表达式查找字符串中的确切字符

    我有像下面这样的字符串 M10 end start M11 M1 M1 start M n1 end M1 我想要实现的目标是仅获得 M1 使用正则表达式 这是我当前的代码 Regex r new Regex M1 M1 输出如下所示 缺少
  • 在 scala 项目上 - 运行 sbt test 命令时出现错误 GC 开销限制超出

    我是 Scala 编程新手并正在学习GC overhead limit exceeded我执行时出错sbt test大型 scala 项目之一中的命令 有人知道我该如何解决这个问题吗 我得到了朋友的帮助 通过使用 mem 选项执行来增加内存
  • 用于检查属性不包含两个值的 CSS 选择器

    我有一个非常奇怪的 CSS 问题想要解决 我正在寻找任何 html 元素not have display none 以其任何有效形式 内联在style属性 一些例子
  • 如何访问 GTK/Gnome 上的主题字体和颜色

    假设我想编写一个特殊的文本编辑器小部件 我如何获得文本的默认主题颜色 选定的文本和背景 这是用户默认的 字体 我看到 GNOME 确实定义了 5 种特殊的系统字体和默认大小 为此 在 GNOME 外观配置对话框中 但我在 GTK 文档中没有
  • 如何在私有子网上运行Dataflow python?

    Apache Beam 2 1 0 添加了对在私有子网上的 Dataflow 运行器上提交作业且无需公共 IP 的支持 这是我们需要满足防火墙规则的 我打算使用squid代理来访问apt get pip等安装python依赖项 代理实例已经
  • 需要动态转换派生类:寻找替代方法

    我以这种简单的形式提出我的问题 class animal public animal name animal virtual void makenoise cout lt lt name lt
  • 替换 Javascript 构造函数的 .prototype 而不是添加它是否存在问题?

    我遇到过另一个开发人员的代码 它执行类似的操作来定义 Javascript 类型 function Ninja Ninja prototype swingSword function return true 当更传统的方式是这样的 func
  • 解析 allocator::rebind 调用

    我刚刚学习 C 分配器 我试图理解的目的struct rebind在每个分配器中 例如 在这个程序 https msdn microsoft com en us library 5fk3e8ek aspx include