Swift UnsafeMutablePointer:我必须在解除分配之前调用 deinitialize 吗?

2023-11-29

给定一个实例UnsafeMutablePointer, 调用有什么意义deinitialize(count:)就在之前deallocate(capacity:)?

你就不能打电话吗deallocate(capacity:)?


我在阅读文章的“使用类型指针”部分时看到了这一点不安全的 Swift:使用指针并与 C 交互 on raywenderlich.com.

本文包含以下代码,您可以将其添加到 Xcode 中的新 Playground 中。

let count = 2
let stride = MemoryLayout<Int>.stride
let alignment = MemoryLayout<Int>.alignment
let byteCount = stride * count

do {
  print("Typed pointers")

  let pointer = UnsafeMutablePointer<Int>.allocate(capacity: count)
  pointer.initialize(to: 0, count: count)
  defer {
    pointer.deinitialize(count: count)
    pointer.deallocate(capacity: count)
  }

  pointer.pointee = 42
  pointer.advanced(by: 1).pointee = 6
  pointer.pointee
  pointer.advanced(by: 1).pointee

  let bufferPointer = UnsafeBufferPointer(start: pointer, count: count)
  for (index, value) in bufferPointer.enumerated() {
    print("value \(index): \(value)")
  }
}

如果您继续阅读,本文将在下面解释代码。

Update:正如用户 atrick 在下面的评论中指出的,仅需要取消初始化不平凡的类型。也就是说,包括去初始化是一种很好的方法,可以在您更改代码时对代码进行未来验证,以防您更改为不平凡的内容。此外,它通常不会花费任何成本,因为编译器会对其进行优化。

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

Swift UnsafeMutablePointer:我必须在解除分配之前调用 deinitialize 吗? 的相关文章

随机推荐

  • 解释双重检查锁定中的竞争条件

    void undefined behaviour with double checked locking if resource ptr 1 std lock guard
  • C# - 文件上传到服务器后损坏

    我使用以下源代码上传文件excel和pdf 但是将文件移动到服务器后 文件已损坏 我认为问题出在编码过程上Encoding UTF8 GetBytes sourceStream ReadToEnd 但我不知道如何解决 public stat
  • 在 Android 中启动 GPS 设置屏幕

    以下代码在三星设备中启动 GPS 设置屏幕 但在 HTC 设备中启动设置的安全屏幕 我如何编写代码 以便它独立于设备启动 GPS 屏幕 请帮助是否有任何替代解决方案 final ComponentName toLaunch new Comp
  • SQL 错误:ORA-00942 表或视图不存在

    我使用 SQL Developer 在创建用户并使用所有所需权限与该用户建立另一个连接后 使用系统用户与数据库建立了连接 但是当我尝试继续以下操作时 出现 SQL 错误 ORA 00942表或视图不存在 INSERT INTO custom
  • 创建每列有多个标题的数据框并在循环中填充数据框

    我想创建一个每列有多个标题的 Pandas 数据框 并使用循环中的数据逐行填充数据框 我以前创建过数据框 但这对于我真正想做的事情来说似乎非常复杂 而且我不知道从哪里开始 Example step list range 1 5 for i
  • 从内容脚本访问窗口变量[重复]

    这个问题在这里已经有答案了 我有一个 Chrome 扩展程序 它试图在每个浏览的 URL 以及每个浏览器 URL 的每个 iframe 上查找变量是否存在window my variable name exists 所以我写了这个小内容脚本
  • pygame.display.toggle_fulscreen() 不起作用

    所以 我试图让 python 切换到全屏 现在我认为我需要做的就是 screen pygame display toggle fullscreen 我认为这已经足够了 但它给了我这个traceback error Traceback mos
  • Hive 表中匹配大小的随机样本

    我有一个蜂巢表activity有柱子userid itemid and rating 可能的评级为 1 和 0 其中正面评级 1 多于负面评级 0 我需要提取一个正面和负面评级数量大致相等的样本 我需要这个样本尽可能大 因此想要对所有负面评
  • C 中单个竖线的含义是什么 [关闭]

    很难说出这里问的是什么 这个问题模棱两可 含糊不清 不完整 过于宽泛或言辞激烈 无法以目前的形式合理回答 如需帮助澄清此问题以便重新打开 访问帮助中心 有人向我展示了以下代码片段并询问它的含义 if pFCT gt FBMap VBQNum
  • 如何将最新的 c++ protobuf (3.2) 与 Android NDK 集成/安装?

    早期的protobuf 3 0版本很容易集成 但最新版本3 2存在问题 它也只是编译和构建所有不相关的 Android cc 文件组件 如果我们遵循最新分支的路径git for c 原型 按照步骤构建它 然后它生成 15 MB 的 SO 文
  • 比较两个文件列表,忽略一个列表中的文件扩展名

    我有两个清单 list1 image1 png image2 png image3 png image3 png list2 image1 pdf image2 eps image3 ps 我想创建一个包含 list1 名称的列表 如果该名
  • 基于另一个选择框更新一个选择框 (Ruby on Rails)

    我是 Ruby on Rails 的新手 需要一些帮助 我正在开发一个可用于跟踪汽车的网络应用程序 有两种模型 一种代表品牌 萨博 本田 丰田等 另一种代表型号 思域 Miata PT Cruiser 等 他们有一个 has many 关系
  • Java 未绑定通配符泛型

    在中使用通配符类型泛型有什么优点吗 Bar课结束后完全跳过它们 public class Foo
  • 如何从groovy返回值到java

    我有一个 jsp 页面绑定到一个运行 groovy 脚本的 servlet 我可以从 servlet 获取 groovy 脚本 但是脚本运行后如何将groovy脚本的响应返回到servlet以显示在jsp页面中 我的java servlet
  • 如果用户未使用 Laravel 5.4 登录,则限制对页面的访问

    我创建了一个仪表板页面 我希望仅当用户登录时才能访问它 登录和注册是通过php artisan make auth命令 有什么技巧或想法可以实现这一点吗 只需将 Auth 中间件添加到您的路由中即可 Route get dashboard
  • C# Windows 应用商店应用程序为 UsbDevice 返回 null

    作为 Windows 应用商店应用程序开发的新手 我正在开发一个必须连接到多个 USB 设备的应用程序 我正在使用 VS 2013 社区 和 C 例如 使用以下方法获取附加网络摄像头的列表 var devices await DeviceI
  • has_many :通过 Rails 中的 has_and_belongs_to_many

    在 Rails 中 使用 has many through 和 has and belongs to many 的效果是什么 考虑有两个模型 帖子和标签 它们具有多对多关系 如下所示 class Tag lt ActiveRecord Ba
  • C 结构体到 Rust 的错误映射

    出于教育目的 我尝试访问FILERust 中的结构 unsafe let passwd libc fopen etc passwd to ptr r as libc c char let fp mut passwd as mut MY FI
  • Java:如何停止线程? [复制]

    这个问题在这里已经有答案了 有什么办法可以从线程外部停止另一个线程吗 例如 如果我运行一个线程来运行该线程并导致该线程停止 它会停止另一个线程吗 有没有办法从内部停止线程而不循环 例如 如果您理想地下载 您会想要使用循环 如果我使用循环 我
  • Swift UnsafeMutablePointer:我必须在解除分配之前调用 deinitialize 吗?

    给定一个实例UnsafeMutablePointer 调用有什么意义deinitialize count 就在之前deallocate capacity 你就不能打电话吗deallocate capacity 我在阅读文章的 使用类型指针