如何删除分配有新放置的对象

2024-01-05

C++ 中的 new 运算符有很多面孔,但我对放置 new 感兴趣。

假设您在特定的内存位置分配内存

 int memoryPool[poolSize*sizeof(int)];
 int* p = new (mem) int; //allocates memory inside the memoryPool buffer

 delete p; //segmentation fault 

在这种情况下如何正确释放内存? 如果我使用名为 myClass 的类来代替内置类型 int 会怎样?

 myClass memoryPool[poolSize*sizeof(myClass )];
 myClass * p = new (mem) myClass ; //allocates memory inside the memoryPool buffer

 delete p; //segmentation fault 

感谢您的帮助。


在第一种情况下,使用新的放置是没有意义的,因为int没有构造函数。

在第二种情况下,它要么毫无意义(如果myClass是微不足道的)或错误,因为数组中已经有对象。

您可以使用放置 new 来初始化内存块中的对象,该对象必须适当对齐,并且不得已包含(非平凡的)对象。

char memory[enough_bytes];  // WARNING: may not be properly aligned.
myClass * c = new (memory) myClass;

完成后,您需要通过调用其析构函数来销毁该对象:

c->~myClass();

这将对象的生命周期与其内存的生命周期分开。您可能还必须在某个时候释放内存,具体取决于您分配内存的方式;在本例中,它是一个自动数组,因此当它超出范围时会自动释放。

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

如何删除分配有新放置的对象 的相关文章

随机推荐

  • System.Web.WebPages 内的 MethodAccessException 将 mvc 3 迁移到 mvc 5

    使用 Visual Studio 2013 我将混合 Asp Net Webforms MVC 3 Framework 4 0 Web 应用程序迁移到 Asp Net Webforms MVC 5 2 2 Framework 4 5 1 我
  • 如何从函数内部的 for 循环退出(转义)函数?

    这是一个理论问题 旨在了解有多少转义 返回或退出 可以应用于嵌套循环或其他控件和函数 我对此感到困惑 因为我被困在代码中如何同时逃离 for 每个循环和方法 https stackoverflow com questions 1557412
  • 将本地分支推送到远程分支

    我在我的 Github 存储库中创建了新存储库 使用 gitpython 库我可以获得这个存储库 然后我创建新分支 添加新文件 提交并尝试推送到新分支 请检查以下代码 import git import random import os r
  • jQuery 将复选框选择转换为数组

    我有一个HTML像这样 div class pgggo list taxon li li div
  • GitHub 操作无法连接到 MongoDB 服务

    我在使用 GitHub 操作运行自动化测试时遇到问题 我不明白为什么我无法连接到运行集成测试的 MongoDB 服务 我尝试了不同的主机 localhost 127 0 0 1 0 0 0 0 但它们都无法连接数据库 它在我的 docker
  • 像 PyCharm/Spyder 一样自动将项目添加到 VS Code 中的 sys.path 吗?

    Problem 在带有子包的 Python 项目中 绝对导入不适用于不在项目根目录中的任何文件 my project my package init py my module py my scripts some script py som
  • 适用于 Windows Phone 8.1 的 PhotoChooserTask 内置裁剪选项

    在 Windows Phone 8 中 我使用 PhotoChooserTask 从手机图库获取图像 当我固定像素宽度和高度时 Windows Phone 会自动启动一个页面来裁剪所选图像 有人可以告诉我如何使用 FileOpenPicke
  • 如何使用JavaScript读取post请求参数

    我正在尝试从 HTML 中读取 post 请求参数 我可以使用 JavaScript 中的以下代码读取获取请求参数 wnd location search 但它不适用于 post 请求 谁能告诉我如何使用 JavaScript 读取 HTM
  • 带有文件内容的.Net资源使docker构建失败

    dotnet build 构建一个没有错误的项目 同时 docker build 给出以下错误 src Audit Worker Example Resources resx error MSB3103 Invalid Resx file
  • Ntext 和 Image 数据类型不能在 WHERE、HAVING、GROUP BY、ON 或 IN 子句中使用

    我收到错误 ntext 和 image 数据类型不能 用于 WHERE HAVING GROUP BY ON 或 IN 子句 除非这些 数据类型与 LIKE 或 IS NULL 谓词 同时尝试 将更改保存到 SQLCE 表 请注意这是一个更
  • jQuery DatePicker:获取选定的日期

    我需要能够从日期选择器中获取选定的日期 并使用选定的值填充另一个文本框 我目前正在使用onClose像这样的函数 defaultDate datepicker onClose function theDate txtEntry1 text
  • Firefox 和 AJAX 文档元素后出现垃圾

    我使用页面获取脚本将网页动态加载到 div 中 这是代码 顺便说一句 我正在使用 Firefox 和 Kubuntu function fetch URL divId req window XMLHttpRequest new XMLHtt
  • 如何在c#中获取图片框上的绘图图形

    我在面板中创建了一个 PictureBox 我在 PictureBox 上画了一些图形 我想通过单击按钮来获取这些图形 我怎样才能做到这一点 Check this http www syncfusion com faq windowsfor
  • 在 Delphi XE5 中生成一个包含数组的示例 JSON

    来自 NET 我一直无法完成我认为简单的任务 我想用TJSONObject TJSONArray TJSONPair等构建一个简单的 JSON 如下所示 APIKEY sadfsafsafdsa UserID 123123123 Trans
  • Moment JS 不包括节假日

    我对 javascript 和 moment js 非常陌生 我正在开发一个网站 我们需要列出产品接下来 5 个可能的提货日期 不包括周末和节假日 我开始使用我在网上找到的一个函数 它可以很好地跳过周末 但我无法让假期工作 任何帮助 将不胜
  • 将 df 与用户定义的函数聚合

    我有一个关于将 pandas 数据帧与用户定义的函数聚合的问题 如果我有一个数据帧并在有或没有 groupby 的情况下运行 agg 则在使用内置函数时会聚合结果 另一方面 如果我使用自定义函数 则在使用 groupby 时它会按预期工作
  • 增加浏览器中的堆栈大小

    简短的问题 我有一个在递归方面非常深入的JavaScript 如何增加堆栈大小以便可以执行它 类似于 Unix 系统中的 ulimit s unlimited 长话短说 我必须画一张图 我使用 Cytoscape JS http js cy
  • Console.log 在 Chrome 中不起作用

    我试图从我的 javascript 代码中记录一些数据来检查它是否正确 但它似乎不起作用 即使我在控制台中输入 console log hello 控制台只返回未定义 这是正确的 但它也不会记录 hello 如果重要的话 我会使用 adbl
  • 使用 kubeadm 为什么要手动生成证书?

    我正在尝试遵循这个tutorial https blog inkubate io install and configure a multi master kubernetes cluster with kubeadm 自己生成证书而不是依
  • 如何删除分配有新放置的对象

    C 中的 new 运算符有很多面孔 但我对放置 new 感兴趣 假设您在特定的内存位置分配内存 int memoryPool poolSize sizeof int int p new mem int allocates memory in