在预先分配的内存中创建对象

2023-11-26

我们可以使用placement new在预先分配的内存中创建一个对象。

让我们考虑以下示例:

char *buf  = new char[1000];   //pre-allocated buffer
string *p = new (buf) MyObject();  //placement new 
string *q = new (buf) MyObject();  //placement new

我在预分配的缓冲区中创建了两个对象。这两个对象是在缓冲区内随机创建的还是在连续的内存块中创建的?如果我们不断地在缓冲区中创建更多的对象,并希望将它们存储在连续的内存块中,我们该怎么办?先在缓冲区中创建一个数组,然后在数组的元素槽中创建每个对象?


这两个对象都是在同一内存位置创建的,即buf。这是未定义的行为(除非对象是 POD)。

如果要分配多个对象,则必须增加指针,例如buf + n * sizeof(MyObject),但要注意对齐问题

完成后也不要忘记调用析构函数。

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

在预先分配的内存中创建对象 的相关文章

  • 使用 CMake 时如何导出 Emscripten 中的 C 函数

    In 本教程 https emscripten org docs porting connecting cpp and javascript Interacting with code html interacting with code
  • Grpc - 将消息从一个客户端发送到连接到同一服务器的另一个客户端

    是否可以将消息从一个客户端发送到连接到同一服务器的另一个客户端 我想将数据从一个客户端发送到服务器然后发送到特定客户端 我想我需要获取客户端 ID 但我不知道如何获取此 ID 以及如何从服务器将此消息发送到该客户端 我这里有一个样本 这是一
  • 如何将 .txt 文件中的数据转换为 xml? C#

    我在一个文本文件中有数千行数据 我想通过将其转换为更容易搜索的内容来轻松搜索 我希望 XML 或其他类型的大型数据结构 尽管我不确定它是否是最好的对于我的想法 每行的数据如下所示 第 31 册 托马斯 乔治 32 34 154 每本书都不是
  • 如何在 C# Designer.cs 代码中使用常量字符串?

    如何在 designer cs 文件中引用常量字符串 一个直接的答案是在我的 cs 文件中创建一个私有字符串变量 然后编辑 Designer cs 文件以使用此变量 而不是对字符串进行硬编码 但设计者不喜欢这样抛出错误 我明白为什么这行不通
  • C++中判断unicode字符是全角还是半角

    我正在编写一个终端 控制台 应用程序 该应用程序应该包装任意 unicode 文本 终端通常使用等宽 固定宽度 字体 因此要换行文本 只需计算字符数并观察单词是否适合一行并采取相应的操作 问题是 Unicode 表中的全角字符在终端中占用了
  • 在 C# 中检查 PowerShell 执行策略的最佳方法是什么?

    当你跑步时Get ExecutionPolicy在 PowerShell 中 它得到有效的执行政策 https learn microsoft com en us powershell module microsoft powershell
  • 如何使用 x64 运行 cl?

    我遇到了和这里同样的问题致命错误 C1034 windows h 未设置包含路径 https stackoverflow com questions 931652 fatal error c1034 windows h no include
  • 是否使用 C# 数据集? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我对 C 中的数据集概念有点困惑 编码 ASP NET 站点 但这并不重要 在我的阅读中 我了解到它们 本质上 用作我的应用程序和我的
  • 在 .NET MAUI 中实现 TouchTracking

    我一直致力于将我们的应用程序从 Xamarin Forms 迁移到 NET MAUI 我们的应用程序几乎没有绘图功能 用户可以用手指进行绘图 我们用了TouchTrackingXamarin Forms 中的 nuget 包 但与 NET
  • 如何递归取消引用指针(C++03)?

    我正在尝试在 C 中递归地取消引用指针 如果传递一个对象 那就是not一个指针 这包括智能指针 我只想返回对象本身 如果可能的话通过引用返回 我有这个代码 template
  • 从 C# 使用 Odbc 调用 Oracle 包函数

    我在 Oracle 包中定义了一个函数 CREATE OR REPLACE PACKAGE BODY TESTUSER TESTPKG as FUNCTION testfunc n IN NUMBER RETURN NUMBER as be
  • 如果输入被重定向则执行操作

    我想知道如果我的输入被重定向 我应该如何在 C 程序中执行操作 例如 假设我有已编译的程序 prog 并且我将输入 input txt 重定向到它 我这样做 prog lt input txt 我如何在代码中检测到这一点 一般来说 您无法判
  • 比较:接口方法、虚方法、抽象方法

    它们各自的优点和缺点是什么 接口方法 虚拟方法 抽象方法 什么时候应该选择什么 做出这一决定时应牢记哪些要点 虚拟和抽象几乎是一样的 虚方法在基类中有一个实现 可以选择重写 而抽象方法则没有 并且must在子类中被覆盖 否则它们是相同的 在
  • 模板类的模板构造函数的 C++ 显式模板特化

    我有一个像这样的课程 template
  • 模板类中的无效数据类型生成编译时错误?

    我正在使用 C 创建一个字符串类 我希望该类仅接受数据类型 char 和 wchar t 并且我希望编译器在编译时使用 error 捕获任何无效数据类型 我不喜欢使用assert 我怎样才能做到这一点 您可以使用静态断言 促进提供一个 ht
  • 使动态创建的链接标签在 Winforms 中可点击

    我正在制作一个程序 允许用户单击由动态链接标签创建的公司名称 在我想知道如何做到这一点之前 我从未在 C 中使用过链接标签 可为特定用户生成的业务数量各不相同 因此每个用户的链接标签数量并不相同 然后我想捕获业务 ID 以进行 Json 调
  • 在 Win32 控制台应用程序中设置光标位置

    如何在 Win32 控制台应用程序中设置光标位置 最好 我想避免制作句柄并使用 Windows 控制台功能 我花了整个早上沿着那条黑暗的小巷跑 它产生的问题比它解决的问题还要多 我似乎记得当我在大学时使用 stdio 做这件事相对简单 但我
  • 如何在 sql azure 上运行 aspnet_regsql? [复制]

    这个问题在这里已经有答案了 可能的重复 将 ASP NET 成员资格数据库迁移到 SQL Azure https stackoverflow com questions 10140774 migrating asp net membersh
  • 是否允许全局静态标识符以单个 _ 开头?

    换句话说 可能static 文件范围 全局变量恰好以一个下划线开头 而不会产生与 C 实现发生名称冲突的可能性 https www gnu org software libc manual html node Reserved Names
  • MySqlConnectionStringBuilder - 使用证书连接

    我正在尝试连接到 Google Cloud Sql 这是一个 MySql 解决方案 我能够使用 MySql Workbench 进行连接 我如何使用 C 连接MySqlConnectionStringBuilder 我找不到提供这三个证书的

随机推荐

  • 在 Docker 容器内运行 Docker:无法连接到 Docker 守护进程

    我创建了一个 Dockerfile 来在 Docker 中运行 Docker FROM ubuntu 16 04 RUN apt get update apt get install y apt transport https ca cer
  • 两个四元数之间的“距离”(或角度大小)?

    我想找到两个四元数之间的 距离 我所说的 距离 是指单个浮点数或整数 而不是另一个四元数 这就是区别 即inverse q1 q2 我想你可以称我想要的为 角幅度 物理对象从原始角度旋转得越远 我就需要对其施加越大的扭矩 我不明白四元数涉及
  • 如何将 ComboBox 的 SelectedItem 绑定到作为 ItemsSource 中项目的副本的对象?

    我正在将 MVVM 模式与 WPF 一起使用 并遇到了问题 我可以将其简化为以下内容 我有一个 CardType 模型 public class CardType public int Id get set public string Na
  • 重写 std:exception 的析构函数

    如果以下情况 则以下程序无法在 g 4 4 中编译 line 8被评论 为什么 看来当我重写时std exception构造函数 我也必须重写它的析构函数 这是什么原因呢 include
  • Scala 中的反函数

    Scala 有没有办法表达任何函数的反函数 例如 如果我有一个函数f像这样 x Int gt x 1 我希望能够编写一个反函数g like f x Int gt x not a valid scala syntax or x Int gt
  • 字符串连接在 SQLite 中不起作用

    我正在尝试执行 SQlite 替换函数 但在函数中使用另一个字段 select locationname p from location 在此片段中 结果是 0 的列表 我本来期望一个字符串 其中包含来自 locationname 的文本和
  • 为什么使用整数而不是长整型?

    我经常看到有关的问题Overflow错误与vba 我的问题是为什么使用integer变量声明而不是仅仅定义所有数值变量 不包括double等 作为long 除非您正在执行类似 for 循环的操作 您可以保证该值不会超过 32 767 限制
  • Windows 上的 Java:如何将文件删除到垃圾箱(使用 JNA)

    我根本没有 Windows API 的经验 所以请原谅我的无知 我想将文件删除到垃圾箱 如何使用JNA以及如何检测这是否不可能 例如 因为文件位于网络共享上 Use com sun jna platform FileUtils代替com s
  • 使用支持 WebGL 的浏览器查看 VRML 文件 [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 目前不接受答案 我有一个生成 VRML 1 0 文件的旧应用程序 我想构建一个基于 WebGL 的 Web 界面来显示这些 VRML 文件 有没有简单的方法可以做到
  • 具有 ngFor 元素的 ngModel 的动态 angular2 形式

    我正在尝试创建一个连接到 ngModel 的动态表单 它允许用户根据需要添加更多控件 如下图所示 表单的行为符合预期 但添加一组新控件时除外 因为它会删除先前输入的内容 尽管模型没有改变 我创建了这个plunkr为了展示我正在谈论的行为 这
  • Kerberos、委派以及如何正确执行此操作?

    我有两个独立的自制应用程序 需要在它们之间进行通信 一个是前端应用程序 实际上是 asp net 另一个是会计应用程序的后端接口 后端接口不是专门为此前端创建的 它是许多其他应用程序用来与我们的产品集成的通用接口 为了方便用户 我们希望在前
  • 离散余弦变换DCT实现C

    我试图在 C 中实现正向和反向离散余弦变换 DCT 代码是通过 dct 函数将单个输入像素块变换为变换矩阵 然后通过 idct 功能 请参阅随附的代码 我的 idct 输出是 244 116 244 116 等连续值 从 idct 值的外观
  • 使用 SDL 时未定义对 WinMain@16 的引用

    我在让一切正常工作方面遇到了很多麻烦 以便我可以开始在 Windows 上进行开发 而不是在 Linux 上进行开发 Linux 是我在编码时通常使用的系统 我在尝试编译 SDL 程序时遇到了一个相当奇怪的问题 一旦我包含 SDL 库 程序
  • php 如何查找用户来自的位置?

    简单的问题 how to find the location url where a user came from before accessing my page and how to find the location url wher
  • Android 中已弃用“java.lang.String”

    我写了这样的简单标签 private static final String TAG MainActivity 字符串已被弃用 有没有其他方法可以使用String 根据此评论java lang string 在 android studio
  • 如何使用leakcanary,如何将leakcanary添加为jar以使用.mk文件构建apk

    LeakCanary 是一个适用于 Android 和 Java 的内存泄漏检测库 金丝雀泄密 我的项目是基于android make文件系统 依赖于一些android内部接口和自定义方法 如何将 LeakCanary 作为库添加到我的应用
  • 在 Hive 中将字符串转换为时间戳

    我的 Hive 表中有以下时间戳字符串表示形式 20130502081559999 我需要将其转换为字符串 如下所示 2013 05 02 08 15 59 我尝试过以下操作 code gt gt gt result from unixti
  • 如何比较不区分大小写和不区分重音的字符串

    如何比较不区分大小写和不区分重音的字符串 好吧 这在 SQL Server 上很容易完成 不过我想在 C NET 4 5 1 上做同样的事情 我怎样才能以最正确的方式做到这一点 我的意思是这 3 个字符串在比较时应该返回相等 http ww
  • Hibernate 查询缓存 - 对于不在二级缓存中的对象 - 有风险吗?有用?不好的做法?

    与此相关question Premise 这些是我的假设 基于我的阅读 经验和理解 它们可能是错误的 如果是 请发表评论 我将编辑问题 查询缓存和二级缓存都很好 查询缓存缓存查询 参数的标识符结果 如果数据库发生更改 并且未反映到缓存中 则
  • 在预先分配的内存中创建对象

    我们可以使用placement new在预先分配的内存中创建一个对象 让我们考虑以下示例 char buf new char 1000 pre allocated buffer string p new buf MyObject place