STL 容器分配放置新

2023-12-01

我找不到这个问题的确切答案,因此在这里发帖。 当我想到向量时,它需要在连续的内存位置构建对象。这意味着向量保持分配的内存,并且必须对推入其中的对象进行就地构造(=放置新的)。这是一个有效的假设吗?另外,这是否意味着容器正在手动调用析构函数而不是调用删除?我在这里还缺少其他假设吗?这是否意味着我可以假设,如果我选择编写,即使是为该对象编写的自定义新内容也可能不会被调用?

列表使用 new 和 delete 也是有意义的,因为我们不需要连续内存保证。那么,这种行为是驱动分配器行为的原因吗?请帮忙。 谢谢


这意味着向量保持分配的内存,并且必须对推入其中的对象进行就地构造(=放置新的)。这是一个有效的假设吗?

Yes

另外,这是否意味着容器正在手动调用析构函数而不是调用删除?

Yes

我在这里还缺少其他假设吗?这是否意味着我可以假设,如果我选择编写,即使是为该对象编写的自定义新内容也可能不会被调用?

是的。请考虑,即使在链接列表中,容器也不会分配类型的实例,而是分配包含该类型的子对象的模板化结构。对于链表,它将是某种复杂类型,包含至少两个指针(两个链接)和您类型的子对象。实际分配的类型是node,不是你的类型。

列表使用 new 和 delete 也是有意义的,因为我们不需要连续内存保证。

确实如此,但又没有new/delete您类型的对象。

那么,这种行为是驱动分配器行为的原因吗?

我不太明白问题的这一部分。分配器是具有标准中定义的一组约束的类,其中包括接口(allocate, deallocate...)和语义(的含义==是分配给一个的内存可以与另一个一起释放,类中的任何其他状态都是不相关的)。

可以出于不同的原因创建分配器并将其传递到容器上,包括效率(如果您只分配一种类型的对象,那么您可能能够实现比小块分配器稍微更高效的分配器malloc——或者不,取决于情况)。

关于新位置的旁注

我一直觉得有趣的是安置新这个术语似乎有两个不同的含义。一方面是构造对象的唯一方式in-place。但它似乎也有完全不同的含义:构造此对象从自定义分配器获取内存.

事实上,它有一个单一的含义安置新这与构建无关in-place。第一种只是第二种情况,其中分配器由 18.4.1.3 中定义的实现(编译器)提供,并且不能重载。重载分配器的特定版本除了返回参数之外什么也不做(void*) 所以这样新表达可以将其传递给构造函数并在由(未)分配的内存上构造对象安置新被称为的版本。

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

STL 容器分配放置新 的相关文章

  • GLKit的GLKMatrix“列专业”如何?

    前提A 当谈论线性存储器中的 列主 矩阵时 列被一个接一个地指定 使得存储器中的前 4 个条目对应于矩阵中的第一列 另一方面 行主 矩阵被理解为依次指定行 以便内存中的前 4 个条目指定矩阵的第一行 A GLKMatrix4看起来像这样 u
  • 查找c中结构元素的偏移量

    struct a struct b int i float j x struct c int k float l y z 谁能解释一下如何找到偏移量int k这样我们就可以找到地址int i Use offsetof 找到从开始处的偏移量z
  • 使用实体框架模型输入安全密钥

    这是我今天的完美想法 Entity Framework 中的强类型 ID 动机 比较 ModelTypeA ID 和 ModelTypeB ID 总是 至少几乎 错误 为什么编译时不处理它 如果您使用每个请求示例 DbContext 那么很
  • BitTorrent 追踪器宣布问题

    我花了一点业余时间编写 BitTorrent 客户端 主要是出于好奇 但部分是出于提高我的 C 技能的愿望 我一直在使用理论维基 http wiki theory org BitTorrentSpecification作为我的向导 我已经建
  • 不同枚举类型的范围和可转换性

    在什么条件下可以从一种枚举类型转换为另一种枚举类型 让我们考虑以下代码 include
  • 创建链表而不将节点声明为指针

    我已经在谷歌和一些教科书上搜索了很长一段时间 我似乎无法理解为什么在构建链表时 节点需要是指针 例如 如果我有一个节点定义为 typedef struct Node int value struct Node next Node 为什么为了
  • 重载<<的返回值

    include
  • 使用 Bearer Token 访问 IdentityServer4 上受保护的 API

    我试图寻找此问题的解决方案 但尚未找到正确的搜索文本 我的问题是 如何配置我的 IdentityServer 以便它也可以接受 授权带有 BearerTokens 的 Api 请求 我已经配置并运行了 IdentityServer4 我还在
  • SolrNet连接说明

    为什么 SolrNet 连接的容器保持静态 这是一个非常大的错误 因为当我们在应用程序中向应用程序发送异步请求时 SolrNet 会表现异常 在 SolrNet 中如何避免这个问题 class P static void M string
  • 转发声明和包含

    在使用库时 无论是我自己的还是外部的 都有很多带有前向声明的类 根据情况 相同的类也包含在内 当我使用某个类时 我需要知道该类使用的某些对象是前向声明的还是 include d 原因是我想知道是否应该包含两个标题还是只包含一个标题 现在我知
  • 如何在整个 ASP .NET MVC 应用程序中需要授权

    我创建的应用程序中 除了启用登录的操作之外的每个操作都应该超出未登录用户的限制 我应该添加 Authorize 每个班级标题前的注释 像这儿 namespace WebApplication2 Controllers Authorize p
  • 如何序列化/反序列化自定义数据集

    我有一个 winforms 应用程序 它使用强类型的自定义数据集来保存数据进行处理 它由数据库中的数据填充 我有一个用户控件 它接受任何自定义数据集并在数据网格中显示内容 这用于测试和调试 为了使控件可重用 我将自定义数据集视为普通的 Sy
  • 如何查看网络连接状态是否发生变化?

    我正在编写一个应用程序 用于检查计算机是否连接到某个特定网络 并为我们的用户带来一些魔力 该应用程序将在后台运行并执行检查是否用户请求 托盘中的菜单 我还希望应用程序能够自动检查用户是否从有线更改为无线 或者断开连接并连接到新网络 并执行魔
  • 链接器错误:已定义

    我尝试在 Microsoft Visual Studio 2012 中编译我的 Visual C 项目 使用 MFC 但出现以下错误 error LNK2005 void cdecl operator new unsigned int 2
  • 将控制台重定向到 .NET 程序中的字符串

    如何重定向写入控制台的任何内容以写入字符串 对于您自己的流程 Console SetOut http msdn microsoft com en us library system console setout aspx并将其重定向到构建在
  • 混合 ExecutionContext.SuppressFlow 和任务时 AsyncLocal.Value 出现意外值

    在应用程序中 由于 AsyncLocal 的错误 意外值 我遇到了奇怪的行为 尽管我抑制了执行上下文的流程 但 AsyncLocal Value 属性有时不会在新生成的任务的执行范围内重置 下面我创建了一个最小的可重现示例来演示该问题 pr
  • 是否可以在 .NET Core 中将 gRPC 与 HTTP/1.1 结合使用?

    我有两个网络服务 gRPC 客户端和 gRPC 服务器 服务器是用 NET Core编写的 然而 客户端是托管在 IIS 8 5 上的 NET Framework 4 7 2 Web 应用程序 所以它只支持HTTP 1 1 https le
  • C++ 中类级 new 删除运算符的线程安全

    我在我的一门课程中重新实现了新 删除运算符 现在我正在使我的代码成为多线程 并想了解这些运算符是否也需要线程安全 我在某处读到 Visual Studio 中默认的 new delete 运算符是线程安全的 但这对于我的类的自定义 new
  • 使用.NET技术录制屏幕视频[关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 有没有一种方法可以使用 NET 技术来录制屏幕 无论是桌面还是窗口 我的目标是免费的 我喜欢小型 低
  • 对来自流读取器的过滤数据执行小计

    编辑问题未得到解答 我有一个基于 1 个标准的过滤输出 前 3 个数字是 110 210 或 310 给出 3 个不同的组 从流阅读器控制台 问题已编辑 因为第一个答案是我给出的具体示例的字面解决方案 我使用的实际字符串长度为 450 个

随机推荐

  • 批处理文件运行时 cmd 中出现奇怪的输出

    我在批处理文件中有该脚本 cd C TESTS front tests call git pull cd C TEST front tests AutoApp bin debug start AutoApp exe And git pull
  • 使用rhandsontable R包生成的表时如何实现shinyStore?

    我正在尝试实现帖子中答案中的 保存 功能如何在 R Shiny 中使用 DT 的 localStorage 选项 进入我用 rhandsontable 渲染的表 但它不起作用 那篇文章涉及表包 DT 而我正在使用 rhandsontable
  • 如何用数学方法缩短网址

    我正在研究使用算法缩短 加密长度为 150 到 250 个字符到最多 12 个字符的 url 的可能性 最初我怀疑这是否可能 但我想利用 StackOverflow 的伟大思想 该算法应该是可以用经典的 asp sql c vb foxpr
  • 如何在android模拟器中运行特定的活动?

    我已经在 Eclipse 中创建了 4 个活动 现在我想在模拟器中分别一一运行活动 1 2 3 4 进行测试 谁能指导我如何运行所有这些 当我按下运行按钮时 它只运行第一个活动 任何帮助 将不胜感激 您可以尝试 startActivityF
  • 无法从 BASH 中的 WHILE 中获取变量的值

    我有一个代码 od An t x1 lt file while read line do for char in line do if needspace eq 0 then export hexs hexs printf 2s char
  • 如何移动放置在容器底部的最小化组件?

    我的容器中有三个组件 其中有按钮 当我点击最小化按钮时 组件会最小化到容器的底部 当我点击最小化组件时 它会最大化 假设三个组件位于底部 如果我最大化第二个组件 那么它就会最大化 而第三个最小化组件不会占据第二个组件的位置 并且这仍然是空间
  • 如何在 Code::blocks 中使用自定义项目模板

    在 MS Visual studio 中 我可以制作自己的项目 然后将其保存为自定义模板以供下次使用 有谁知道如何在代码块中做到这一点 一张图片胜过千言万语 https i stack imgur com BX5lM png
  • Raspberry pi 与 pygame.mixer 音频仅产生静态

    我对树莓派很陌生 而且很新 但我试图通过 pi B 上的 python 文件播放音频文件 我使用 omxplayer 从命令行播放音频 它工作正常 但是当我运行以下命令时它仅播放静态代码 from pygame import mixer m
  • 在Java中表示卡片的类?

    我正在用 Java 编写一个二十一点程序 并且开始为对象 Card 编写类声明 这足够了 还是有一些我应该掩盖的方法 public class Card public int suit Value 1 4 to represent suit
  • 如何使用锁定提示以便两个并行查询返回不相交的结果?

    我有一个 SQL 表Tasks有柱子Id and State 我需要执行以下操作 找到任何一项具有状态的任务ReadyForProcessing 检索其所有列并将其状态设置为Processing 类似于 伪代码 BEGIN TRANSACT
  • GCC LTO 是否执行跨文件死代码消除?

    说我有一个函数 void do something ifdef FEATURE X feature x endif 我可以毫无问题地编译和运行它 如果我想要这个功能我可以通过 D FEATURE X它有效 但是 如果我想把do someth
  • 长时间运行的线程如何在 Web 应用程序中工作

    所以我在 MVC 控制器方法内部有以下代码 public ActionResult ProcessFile ThreadStart threadStart new ThreadStart gt Doing some long process
  • 使用 dplyr mutate 根据列名向量创建新列

    我想获取一些列的日志 并创建全部命名为 log 原始列名称 的新列 下面的代码有效 但是我如何传递名为columnstolog变异 谢谢 library dplyr data mtcars columnstolog lt c mpg cyl
  • 适用于 Twitter API 的 Windows Phone SDK

    我想在 WindowsPhone7 上为 Twitter 开发一个示例应用程序 所以有人建议我是否有适用于 Windows Phone 的 SDK 可用 还有 OAuth API 实现的任何代码示例 谢谢 有一些关于构建 Twitter 应
  • 在 C 语言中 strcmp() 到底返回什么?

    我用 C 语言编写了这段代码 include
  • 使用 COALESCE 函数使值以逗号分隔

    我有一张桌子 EMP 我知道使用COALESCE函数我们可以通过这种方式获取任意列的值 23 23 45 34 SELECT OfferID FROM Emp where EmpID 23 但我没有得到实现此目的的语法 任何帮助都会很好地解
  • NPAPI 插件之上的 HTML

    在我使用 FireBreath 和 OpenGL 编写完浏览器插件并使用对象标签嵌入插件后 我尝试在插件之上覆盖各种 HTML 元素 不幸的是 无论我如何尝试 标签和插件图形始终位于页面上任何其他 HTML 元素的顶部 据我所知 flash
  • 使用 awk 在数字和数字之间转换月份

    在过去的考试试卷中 我有一个问题 月份可以用不同的方式表示 例如数字 1 2 12 或三字母月份名称 Jan Feb Dec 建议如何使用 awk 中的关联数组来转换 三个字母的月份名称到月份数字 反之亦然 到 将月份数字翻译为三个字母的月
  • nodejs - mongodb - 如何找到所有a!= b?

    这是征集会 id R65i3SmvucW9imK2cxA6wdFb GXoSHjly7obzFNslklNCBvE0UrW qOiNmiBtPN24 1c session channel all username xuka expires
  • STL 容器分配放置新

    我找不到这个问题的确切答案 因此在这里发帖 当我想到向量时 它需要在连续的内存位置构建对象 这意味着向量保持分配的内存 并且必须对推入其中的对象进行就地构造 放置新的 这是一个有效的假设吗 另外 这是否意味着容器正在手动调用析构函数而不是调