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 容器分配放置新 的相关文章

  • 在 C# 中转换 VbScript 函数(Right、Len、IsNumeric、CInt)

    同样 我在 VbScript 中得到了以下代码 您能建议一下 C 中的等效代码吗 Function GetNavID Title getNavID UCase Left Title InStr Title 1 End Function 我已
  • 如何从更高级别启动用户级别的 Exe

    我希望一个进程始终在用户级别运行 当它由以管理员级别运行的安装程序 自定义 而不是 msi 启动时 或者当用户登录时 环顾四周 我不确定这是否可能 最简单的方法是有 2 个进程 一种是普通用户 它启动提升 管理进程 然后管理进程可以使用 I
  • Excel的解析路径

    其实我想问以下问题 对于位于 目录中定义的 PATH 怎么能 我找出这些目录中的哪个 找到了 因为我需要使用 Process Run 从 C 运行 Excel 并且只需指示 Excel 即可正常工作 Windows 似乎知道在哪里可以找到它
  • C 语言中的套接字如何工作?

    我对 C 中的套接字编程有点困惑 You create a socket bind it to an interface and an IP address and get it to listen I found a couple of
  • 如何在 C++ 中对四元结构进行有效排序?

    我有一个包含 x y z 和 w 成员的结构 如何高效排序 在 C 中首先按 x 然后按 y 按 z 最后按 w 如果你想实现字典排序 那么最简单的方法是使用std tie实现小于或大于比较运算符或函子 然后使用std sort http
  • 使用 C# 和反射打印完整的对象图

    我有一个复杂的对象 class A int Field1 int field2 property ClassB ClassB property classC classC etc etc 我想使用反射打印完整的对象图 有什么好的代码吗 一种
  • 如何正确实现带有 close 方法的处置模式(CA1063)

    框架设计指南 第二版 第 327 页 说 考虑提供方法Close 除了Dispose 如果接近 是该领域的标准术语 这样做时 重要的是使 Close 实现与Dispose并考虑实施IDisposable Dispose方法明确 因此 按照提
  • 起订量工作单元

    我是单元测试的新手 我想为我的搜索功能创建一个测试 我的服务层看起来像 public class EmployeeService BaseService IEmployeeService public EmployeeService IUn
  • 如何获取 PropertyGrid 的单元格值 (c#)?

    如何在 C 中获取属性网格项和项的值 例如 Name Ali LastName Ahmadi Name 和 LastName 是 propertygrid 的 2 个属性 PropertyGrid只是对象的组件模型表示的视图 我会说 查看组
  • 会员提供商使用还是不使用?

    我正在开发一个使用 Facebook 的网站 现在为了管理用户我想使用MembershipProvider并选择开发一个定制的会员提供商 我的问题是我的数据库架构与标准成员资格架构不匹配 并且提供的用于覆盖的函数采用与我预期不同的参数 例如
  • 关于 FirstOrDefault 或 SingleOrDefault

    FirstOrDefault 或 SingleOrDefault 将返回什么类型的数据 假设我的查询返回 3 条记录 例如 empid ename salary 1 joy 1500 2 rob 4500 3 jen 6500 所以如果我们
  • 为什么C++中没有“NULL引用”?

    我正在阅读 C 常见问题解答 8 6 什么时候应该使用引用 什么时候应该使用指针 http www parashift com c faq lite refs vs ptrs html 特别是以下声明 可以时使用引用 必要时使用指针 上述情
  • C++中的虚方法表存放在哪里?

    我想知道类对象 不是实例 而是类 如何存储在内存中 class A public int a virtual void f virtual A class B public A public int b void f final overr
  • 在unity3D中显示数学方程

    我想使用它的 GUI 系统统一显示数学方程 有办法吗 我正在使用 C 语言在 Unity 中进行编程 如果我还可以使用 C 代码显示数学符号 这对我来说会很有用 谢谢 自 2016 年起 您可以使用TEXDraw https assetst
  • OpenMP 和 C++:this 指针

    Is thisOpenMP 中始终共享指针 尽管编译器不会抱怨以下代码default none pragma omp parallel for default none shared n for SInt i 0 i lt n i f i
  • vs2010 c++ 通过debug查看指针内容

    我正在使用 Vs2010 c 处理 2D 数组 我从一维指针开始 并使用操作 如下 class CMatrix void clear public int nRows int nCols short MyMat CMatrix CMatri
  • 如何查明我的字符串是否包含“micro”Unicode 字符?

    我有一个包含实验室数据的 Excel 电子表格 如下所示 g L ppb 我想测试希腊字母 是否存在 如果发现我需要做一些特别的事情 通常 我会写这样的东西 if cell StartsWith matchSequence lt unive
  • 有没有办法将复选框列表绑定到 asp.net mvc 中的模型

    我在这里寻找一种快速简便的方法来在模型中发生回发时绑定复选框列表项的列表 显然现在常见的做法似乎是这样的form GetValues checkboxList 0 Contains true 这看起来很痛苦而且不太安全 有没有一种方法可以绑
  • 错误:C# 尝试读取或写入受保护的内存

    我很难纠正这个错误 该应用程序在 4 台不同的机器上进行了测试 在其中 3 台上运行良好 但一台 Vista PC 在尝试通过 WebBrowser1 打开页面时出现此错误 解决这个问题的任何帮助对我都会非常有帮助 System Acces
  • Eclipse CDT C/C++:包含另一个项目的头文件

    我在 Eclipse CDT 中有两个 C 项目main and shared In shared我有一个名为calc h 我想在中使用这个标头main 所以我做了以下事情 added include calc h到相关文件main In

随机推荐

  • 批处理文件运行时 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 容器分配放置新

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