删除void指针是否保证删除正确的大小? [复制]

2023-11-23

可能的重复:
删除空指针安全吗?

说我有一个new分配给一个名为MyClass分配很简单:

MyClass *myClassPtr = new MyClass();

我存储了对列表的引用void*我简单地说

myListOfPointers.add(static_cast<void*>(myClassPtr)); // this has to be void*

后来我释放内存,而不是这样做:

delete myClassPtr

I use:

delete MyListOfPointer.get(0)

(假设 myClassPtr 引用的索引为零。)另外,请注意,它必须是void*因为这个列表可以存储不同类型的指针,所以我不知道我要删除的指针的类型:

所以我不能做这样的事情:

delete static_cast<MyClass*>(MyListOfPointer.get(0))

这种方式会释放正确的内存大小吗? (sizeof(MyClass))?

Note:
我并不是在寻找任何指向智能指针的答案。


通过删除void*导致未定义的行为,所以你不能得到任何保证。

5.3.5 删除[expr.delete]

1 The delete-expression operator destroys a most derived object (1.8) or array created by a new-expression.
[...]
The operand shall have a pointer to object type, or a class type having a single non-explicit conversion function (12.3.2) to a pointer to object type. The result has type void.78

78) 这意味着不能使用 void* 类型的指针删除对象,因为 void 不是对象类型。

强调我的。


因此,即使您说不说,答案也是创建某种形式的智能指针。它需要使用类型擦除在外部隐藏类型(允许异构列表),但在内部跟踪给定的类型以及如何删除它。很像的东西boost::any.

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

删除void指针是否保证删除正确的大小? [复制] 的相关文章

  • OpenCv读/写视频色差

    我试图简单地使用 openCV 打开视频 处理帧并将处理后的帧写入新的视频文件 我的问题是 即使我根本不处理帧 只是打开视频 使用 VideoCapture 读取帧并使用 VideoWriter 将它们写入新文件 输出文件看起来比输入更 绿
  • 我的线程图像生成应用程序如何将其数据传输到 GUI?

    Mandelbrot 生成器的缓慢多精度实现 线程化 使用 POSIX 线程 Gtk 图形用户界面 我有点失落了 这是我第一次尝试编写线程程序 我实际上并没有尝试转换它的单线程版本 只是尝试实现基本框架 到目前为止它是如何工作的简要描述 M
  • C#动态支持吗?

    看完之后这个帖子 https stackoverflow com questions 2674906 when should one use dynamic keyword in c sharp 4 0k和链接 我还有 2 个问题 问题 1
  • 为什么大多数 C 开发人员使用 Define 而不是 const? [复制]

    这个问题在这里已经有答案了 在许多程序中 define与常量具有相同的用途 例如 define FIELD WIDTH 10 const int fieldWidth 10 我通常认为第一种形式优于另一种形式 它依赖于预处理器来处理基本上是
  • 使用post方法将多个参数发送到asp.net core 3 mvc操作

    使用 http post 方法向 asp net mvc core 3 操作发送具有多个参数的 ajax 请求时存在问题 参数不绑定 在 dot net 框架 asp net web api 中存在类似的限制 但在 asp net mvc
  • C++:重写已弃用的虚拟方法时出现弃用警告

    我有一个纯虚拟类 它有一个纯虚拟方法 应该是const 但不幸的是不是 该接口位于库中 并且该类由单独项目中的其他几个类继承 我正在尝试使用这个方法const不会破坏兼容性 至少在一段时间内 但我找不到在非常量方法重载时产生警告的方法 以下
  • 在 2D 中将一个点旋转另一个点

    我想知道当一个点相对于另一个点旋转一定角度时如何计算出新的坐标 我有一个块箭头 想要将其相对于箭头底部中间的点旋转角度 theta 这是允许我在两个屏幕控件之间绘制多边形所必需的 我无法使用和旋转图像 从我到目前为止所考虑的情况来看 使问题
  • Azure 事件中心 - 按顺序接收事件

    我使用下面的代码从 Azure Event Hub 接收事件 https learn microsoft com en us azure event hubs event hubs dotnet framework getstarted s
  • 基于xsd模式生成xml(使用.NET)

    我想根据我的 xsd 架构 cap xsd 生成 xml 文件 我找到了这篇文章并按照说明进行操作 使用 XSD 文件生成 XML 文件 https stackoverflow com questions 6530424 generatin
  • 无法将类型“System.IO.Stream”隐式转换为“Java.IO.InputStream”

    我提到了一些类似的问题 但没有一个涉及IO 当我使用时 我在java中使用了相同的代码Eclipse 那次就成功了 但现在我尝试在中使用这段代码Mono for Android C 它不起作用 我正在尝试运行此代码来创建一个InputStr
  • 如何重置捕获像素的值

    我正在尝试创建一个 C 函数 该函数返回屏幕截图位图中每四个像素的 R G 和 B 值 这是我的代码的一部分 for int ix 4 ix lt 1366 ix ix 4 x x 4 for int iy 3 iy lt 768 iy i
  • 生产代码中的 LRU 实现

    我有一些 C 代码 需要使用 LRU 技术实现缓存替换 目前我知道两种实现LRU缓存替换的方法 每次访问缓存数据时使用时间戳 最后比较替换时的时间戳 使用缓存项的堆栈 如果最近访问过它们 则将它们移动到顶部 因此最后底部将包含 LRU 候选
  • 为什么我不应该对不是由 malloc() 分配的变量调用 free() ?

    我在某处读到 使用它是灾难性的free删除不是通过调用创建的对象malloc 这是真的 为什么 这是未定义的行为 永远不要尝试它 让我们看看当您尝试时会发生什么free 自动变量 堆管理器必须推断出如何获取内存块的所有权 为此 它要么必须使
  • 通过 NHibernate 进行查询,无需 N+1 - 包含示例

    我有一个 N 1 问题 我不知道如何解决它 可以在这个问题的底部找到完全可重复的样本 因此 如果您愿意 请创建数据库 设置 NUnit 测试和所有附带的类 并尝试在本地消除 N 1 这是我遇到的真实问题的匿名版本 众所周知 这段代码对于帮助
  • 当我“绘制”线条时,如何将点平均分配到 LineRenderer 的宽度曲线?

    我正在使用线条渲染器创建一个 绘图 应用程序 现在我尝试使用线条渲染器上的宽度曲线启用笔压 问题在于 AnimationCurve 的 时间 值 水平轴 从 0 标准化为 1 因此我不能在每次添加位置时都在其末尾添加一个值 除非有一个我不知
  • 结构体指针的动态数组

    我必须使用以下代码块来完成学校作业 严格不进行任何修改 typedef struct char firstName char lastName int id float mark pStudentRecord pStudentRecord
  • 使用 CSharpCodeProvider 类编译 C# 7.3 的 C# 编译器版本是什么?

    我想使用 Microsoft CSharp CSharpCodeProvider 类来编译 C 7 3 代码 编译器版本在 IDictionary 中指定 在创建新的 CSharpCodeProvider 时将其作为输入 例如 Compil
  • Googletest:如何异步运行测试?

    考虑到一个包含数千个测试的大型项目 其中一些测试需要几分钟才能完成 如果按顺序执行 整套测试需要一个多小时才能完成 通过并行执行测试可以减少测试时间 据我所知 没有办法直接从 googletest mock 做到这一点 就像 async选项
  • 错误:无效使用不完整类型“类 Move”/未定义对 Move::NONE 的引用

    拜托 我不知道为什么这个简单的代码被拒绝 它给了我 2 个编译错误 请帮帮我 I use 代码 块 20 03 我的编译器是GNU GCC 移动 hpp class Move public Move Move int int public
  • android ndk 硬件调试内存

    背景 我对 C 很有经验 对 Android 和 Java 还很陌生 但这是编程的环境问题 我已经用 ANSI C 开发了一个管理应用程序 可以移植到任何操作系统 只需在依赖于操作系统的代码中添加 UI 即可 它使用相当多的内存 特别是对于

随机推荐

  • 带有 WHERE 子句的 PostgreSQL 更新插入

    我正在尝试将 Oracle 合并查询迁移到 PostgreSql 如中所述this文章中 Postgres UPSERT 语法支持 where 子句 来识别冲突条件 不幸的是 该网页没有提供带有 where 子句 的示例 我尝试在其他地方寻
  • pytest 的 PATH 问题“ImportError:没有名为 ...”的模块

    I used 简易安装安装pytest在 Mac 上并开始为具有如下文件结构的项目编写测试 repo app py settings py models py tests test app py Run py test当在repo目录 一切
  • 实体框架子查询

    伙计们 我是实体框架的新手 我遇到了一个问题 我已经尝试解决很长一段时间了 基本上我有 4 个实体 用户 组 书籍和阅读列表 用户可以加入一个组 并且组包含书籍 由 ReadingList 定义 我正在尝试显示特定组的书籍列表 SQL 如下
  • 在 matplotlib 中将 x 和 y 数据作为关键字参数传递?

    或者 为什么不 import numpy import matplotlib pyplot as plt plt plot xdata numpy array 1 ydata numpy array 1 color red marker o
  • 在 Android 中创建短信应用程序?

    我正在创建一个短信应用程序来发送和接收短信 我可以使用以下代码发送短信 SmsManager sms SmsManager getDefault sms sendTextMessage phoneNumber null message pi
  • 如何从范围中获取随机数,排除某些值

    在 C 中 如何从一系列值 例如 1 100 中获取随机数 但该数字不应该位于某些特定值列表中 例如 5 7 17 23 由于没有人发布任何示例代码 private int GiveMeANumber var exclude new Has
  • 关系数据库中的空值可以吗? [关闭]

    Closed 这个问题需要细节或清晰度 目前不接受答案 有一种观点认为关系数据库中不应允许空值 也就是说 表的属性 列 不应允许空值 来自软件开发背景的我真的不明白这一点 似乎如果 null 在属性的上下文中有效 那么就应该允许它 这在 J
  • Python PEP479 更改生成器内部的 StopIteration 处理

    有人可以帮助我了解 PEP479 的含义吗 我正在阅读文档 但无法理解它 摘要说 此 PEP 提议对生成器进行更改 当在生成器内引发 StopIteration 时 它会被替换为 RuntimeError 更准确地说 当异常即将从生成器的堆
  • 嵌入式应用程序中的内存管理资源

    我应该如何管理任务关键型嵌入式应用程序中的内存 我通过谷歌找到了一些文章 但无法找到真正有用的实用指南 The DO 178b禁止动态内存分配 但是如何管理内存呢 提前预分配所有内容并向每个需要分配的函数发送一个指针 分配到栈上 使用全局静
  • XAMPP MySQL 说:无法连接:无效设置

    MySQL 工作正常 然后无缘无故地每当我打开时就会出现此错误http localhost phpmyadmin 我在这里花了几个小时试图找到解决方案 但我尝试过的所有方法都不起作用 有人可以帮帮我吗 我正在使用 XAMPP版本 7 3 6
  • 使用 Yahoo YQL 查询 html

    在尝试使用雅虎查询语言和 YQL 提供的 xpath 功能解析 html 时 我遇到了无法提取 text 或属性值的问题 例如 永久链接 select from html where url http stackoverflow com a
  • 如何在 MongoDB 中使用 Map/Reduce?

    我无法理解 Map Reduce 在 MongoDB 中的工作原理 我有一个包含字段的集合 areacode state county zip city lat lon列出了美国的每个邮政编码以及相应的县 州等 我希望能够查询给定州的所有县
  • 在 iOS 上创建发光文本效果

    我们目前正在构建一个 iPhone 应用程序 希望文本具有发光效果 以适应现实的 UI 设计 这就是我们想要实现的目标 目前我们正在努力创造内部发光效果 因此我们将不胜感激 在 Photoshop 中这段文字有 颜色 98c1c1 外发光
  • Tomcat Java Servlet - 在应用程序启动时初始化类

    我有一个类需要一些时间来启动 进行一些 JNI 调用以及其他调用 因此每次加载页面时初始化此类是不可行的 是否可以在应用程序启动时初始化此类 然后在提供页面时访问其方法 例如 我有我的班级 当应用程序 tomcat 启动时 我希望它初始化
  • 退出 HttpClient 会话

    如何退出 HttpClient 会话 我使用以下代码使用 Apache HttpClient 登录到应用程序 public HttpClient loginToHexgen String username String password H
  • UML 类图:如何对调用方法或启动活动或服务的关系进行建模

    我正在创建我的第一个 Android 应用程序 我避免标记与用户或系统交互的关联 例如 我标记了starts反而单击时开始 我已经标记了starts反而检测开始时 然而读完之后this 我正在考虑改变starts协会由 gt 依赖关系 我很
  • CSS 居中内容的适当方法

    我更喜欢使用基于 CSS 的设计 但作为后端编码人员 我的 CSS 技能有点弱 当我涉及布局时 我倾向于依靠基于表格的格式 因为我的思想已经被多年来基于表格的滥用所扭曲 有一个特别的问题我总是被绊倒 最好的 CSS 替代品是什么 table
  • 保护 Rails 登台环境的密码

    我正在尝试找出保护我的暂存环境的最佳方法是什么 目前我在同一台服务器上运行登台和生产 我能想到的两个选择是 使用 Rails 摘要身份验证 我可以把这样的东西放在 application controller rb 中 Password p
  • 使用 Opencv 模糊矩形中的内容

    在下面的矩形函数中 绘制矩形 Draw the predicted bounding box void drawPred int classId float conf int left int top int right int botto
  • 删除void指针是否保证删除正确的大小? [复制]

    这个问题在这里已经有答案了 可能的重复 删除空指针安全吗 说我有一个new分配给一个名为MyClass分配很简单 MyClass myClassPtr new MyClass 我存储了对列表的引用void 我简单地说 myListOfPoi