为什么这个函数返回一个(拥有的)值?

2023-12-15

代码 从:Genie 如何将字符串作为字符串数组重复 N 次Genie 如何将字符串作为字符串数组重复 N 次

def repeatwithsep (e: string, n: int, separator: string): string
    var elen = e.length;
    var slen = separator.length;
    var a = new StringBuilder.sized ((elen * n) + (slen * (n - 1)) + 1);
    for var i = 0 to (n - 1)
        if i != 0
            a.append_len (separator, slen)
        a.append_len (e, elen)
    return (owned) a.str

var a是局部变量,当a超出范围,它将被销毁。 为什么有这个功能

返回(拥有)a.str

有什么区别

返回 a.str

返回(拥有)a.str

(拥有)有什么好处


return a.str将使用以下方式复制字符串g_strdup,因为默认情况下,函数结果和 StringBuilder 在(隐式)赋值后都将拥有字符串的单独副本。

由于 StringBuilder 存储在a将超出范围,并且它的副本将永远不会再次使用,在这种情况下这是不理想/高效的。

因此,解决方案是将字符串的所有权传递给a.str使用函数的结果(owned)指示。

顺便说一句:您可以通过编译两个版本来轻松找到这一点valac -C并比较生成的 C 代码:

-       _tmp21_->str = NULL;
-       result = _tmp22_;
+       _tmp23_ = g_strdup (_tmp22_);
+       result = _tmp23_;

(在这个比较中,左侧是return (owned) a.str右边是return a.str)

PS:这记录在Vala 教程的所有权部分还有Genie教程的相应部分.

我还推荐参考处理文章.

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

为什么这个函数返回一个(拥有的)值? 的相关文章

  • CGImageRelease:[不是类型发布]:发送到已释放实例的消息

    我在代码 CGImageRelease imageToSave 的最后一行收到此错误 不是类型发布 消息发送到已释放的实例 请解释原因以及我需要使用什么来修复它 我正在使用 ARC 但我认为这不适用于 CG 对象 在测试代 码是否有效后 我
  • 内核虚拟地址转换

    考虑到 Linux 和 32 位 x86 架构 可访问的 4GB 地址空间的比例为 3 1 用户空间分配0 3 Gb 而3 4 Gb 分配给内核 大于 3Gb 且位于内核地址空间的虚拟地址如何转换为物理地址 页表会出现吗 梅尔 戈尔曼的书中
  • 在 C++03 中返回 `std::auto_ptr` 集合之类的内容的最佳方法是什么?

    std auto ptr不允许存储在STL容器中 例如std vector 但是 有时我需要返回多态对象的集合 因此我无法返回对象向量 由于切片问题 我可以用std tr1 shared ptr并将它们粘贴在vector 但随后我必须付出高
  • Linux Slab 分配器和缓存性能

    来自指南理解Linux内核第三版 第 8 2 10 章 板坯着色 从第 2 章我们知道 同一个硬件缓存行映射许多不同的 RAM 块 在这个 在本章中 我们还看到相同大小的对象最终存储在缓存中的相同偏移量处 不同板内具有相同偏移量的对象将以相
  • 当计数为 1 时,有条件地将 T 从 Rc 移出

    有没有办法将物体从Rc
  • 我如何查看我的应用程序使用了多少超出其虚拟机预算的内存?

    我查看了 DDMS 但没有看到任何内容 谢谢 您应该在 DDMS 的 设备 视图中单击 更新堆 按钮
  • 获取进程段的开始和结束 C/C++

    我需要获取以下进程段的开始和结束地址 代码 数据 堆栈 环境 我了解它如何位于内存中 但不知道如何使用 api 调用或其他方式获取它 我找到了如何使用此代码开始某些片段 include
  • WinRT 有垃圾收集吗?

    WinRT 有垃圾收集吗 或者它是否像 COM 一样进行引用计数 I found 本文 http www itwriting com blog 4866 a few facts about microsofts new windows ru
  • 销毁与解除分配

    在 Accelerated C 第 11 章中 作者提出了一个使用数组模拟 std vector 行为的 Vector 类 他们使用分配器类来处理内存管理 的作用uncreate函数是销毁数组的每个元素并释放为数组分配的空间 templat
  • 如何减少Scala中创建的对象数量?

    我正在 Scala 中编写一个计算机图形应用程序 它使用 RGB 类返回图像中某个点的颜色 正如你可以想象的 返回颜色 RGB 对象的函数被调用了很多次 class RGB val red Int val green Int val blu
  • 在 C 中释放 NULL 指针是一个好习惯吗? [复制]

    这个问题在这里已经有答案了 可能的重复 ptr 为 NULL 的 free ptr 是否会损坏内存 https stackoverflow com questions 1938735 does freeptr where ptr is nu
  • iPhone应用程序NSNumber内存泄漏

    我遇到了内存泄漏 但我不知道它从哪里来以及如何修复它 在某些时候 我计算两个位置之间的距离 double calc self getDistance location to otherLocation NSNumber distance N
  • Java HashMap 与 ArrayList 相比的内存开销

    我想知道java HashMap与ArrayList相比的内存开销是多少 Update 我想提高搜索一大包 600 万以上 相同对象的特定值的速度 因此 我正在考虑使用一个或多个HashMap来代替ArrayList 但我想知道 HashM
  • Java 6 内存使用过多

    对于大型应用程序 Java 6 消耗的内存是否比您预期的要多 我有一个已经开发多年的应用程序 到目前为止 在我的特定测试配置中 该应用程序占用了大约 30 40 MB 的空间 现在 对于 Java 6u10 和 11 活动时需要数百个时间
  • numpy.ndarray 对象不被垃圾回收

    在尝试微调某些 C C 函数的 Python 绑定中的一些内存泄漏时 我发现了一些与 Numpy 数组的垃圾收集相关的奇怪行为 为了更好地解释这种行为 我创建了几个简化的案例 该代码是使用memory profiler 其输出紧随其后 当涉
  • “损坏的双链表”是什么意思

    我最近从我的 PHP 中收到以下错误 WARNING pool www child 42475 said into stderr glibc detected php fpm pool www corrupted double linked
  • 为什么 new()/delete() 比 malloc()/free() 慢?

    为什么new delete 比malloc free 慢 EDIT 感谢到目前为止的回答 如果您有new 和delete 的标准C 实现规范 请指出 谢谢 看一下这段C代码 struct data pd malloc sizeof stru
  • laravel 基本查询中“允许的内存大小已耗尽 134217728 字节”

    我不知道为什么我无法让以下工作正常工作 DB table twitter hashtags gt paginate 5 每次我得到 第二个数字往往不同 Allowed memory size of 134217728 bytes exhau
  • 如何在 Windows 7 中模拟内存不足的情况

    我有一个用 C 编写的应用程序 运行良好 但有时在现场会出现错误 我们认为这些错误是由于内存不足或与垃圾收集器的交互造成的 如果有人感兴趣 这里有描述 无法将 NHibernate Impl ExpandedQueryExpression
  • Windows 中内存分配的限制+我计算得是否正确?

    我正在编写一个需要大量内存的程序 大型图形分析 目前我的程序中有两个主要的数据结构 占用了大部分内存 这些都是 n n 类型的矩阵int 和长度为 n 的数组 类型Node 在本例中 节点是一个包含两个 int 的结构体 sizeof No

随机推荐

  • “滚动”到长文本输入的最右侧

    我有一个图像选择器 允许从图库中选择图像 然后将 URL 填充到
  • 如何从 Windows Vault 凭据管理器存储和检索凭据?

    我想在 Windows PC 上安全地存储明文密码 我目前正在使用 DPAPICryptProtectData对其进行加密 然后将加密的 blob 存储在用户本地 AppData 的文件中 在 Windows 7 中 有 Windows V
  • 正则表达式来计算直接扑克牌?

    是否有正则表达式来计算直接扑克手牌 我使用字符串来表示排序后的卡片 例如 AAAAK sssss 4 aces and a king all of spades A2345 ddddd straight flush all of diamo
  • USER32.dll 中缺少入口点导致程序无法启动、C++、VS2015

    我正在使用 C 程序编写VS2015 平台工具集 v140 目标平台 8 1 在 Windows 10 计算机上 我的程序直到最近在 Windows 7 8 和 10 上运行得很好 添加触摸支持后使用GetPointerInfo 我在 Wi
  • Rails 4 - 将变量传递给部分

    我正在关注 Ruby on Rails 教程 并在尝试将变量传递给部分时遇到问题 My user部分如下 li li 我想传递一个数字作为尺寸值 我尝试如下但没有任何运气 从 Rails api 上部分渲染 渲染默认情况 如果您不打算使用集
  • JSF 2 - 隐藏

    有没有办法隐藏我的号码属性的默认值 我有一个int领域 在我看来
  • JavaScript 使用参数调用 VBA 例程

    我需要从 HTA 的 JavaScript 将参数传递给 Excel VBA 代码 我可以成功调用 VBA 函数 但无法正确传递字符串参数 JavaScript 函数可以传递不同的字符串参数 下面是简单和演示形式的代码 Excel VBA代
  • 如何在getter方法中获取调用组件的ID?

    给出以下示例
  • 移动设备上的 OutOfMemoryException

    我正在开发一个使用移动设备拍摄照片并使用网络服务发送照片的应用程序 但在我拍了 4 张照片后 我得到了OutOfMemoryException在下面的代码中 我尝试打电话GC Collect 但这也没有帮助 也许这里有人可以给我如何处理这个
  • 计算某个值在列中出现的次数(excel)

    好的 所以我有一个 Excel 文件 其中有一列可能包含像这样的重复值 采购订单编号 采购订单数量P100293490 4P100293490P100293490P100293490P100293492 2P100293492P100293
  • 调试窗口服务

    我想调试窗口服务 我应该在 main 中编写什么才能在窗口服务中启用调试 我正在使用 C 开发窗口服务 if DEBUG System Diagnostics Debugger Break this OnStart null System
  • Bot Framework 4 带有 ChannelData null 引用和 Facebook Messenger 的新活动

    我无法在 Facebook Messenger 中显示与此相关的任何按钮或图像 这太令人沮丧了 似乎没有任何作用 说明 样品等 似乎已经过时了 这是我的代码 在其他渠道中 我为此使用 SuggestedActions 我基本上是在问 是 或
  • MVC + RegisterClientScriptInclude / RegisterClientScriptBlock

    是否有与 Page ClientScripts RegisterClientScriptInclude 和 Page ClientScripts RegisterClientScriptBlock 等效的 MVC 我希望创建部分视图 这些视
  • 如何使用 FileSystemObject 进行“复制和重命名”

    使用文件系统对象在 VB VBA 或者我猜是本机 VBA 调用 中 我怎样才能 复制文件夹 重命名文件夹 所以 像这样 mFSO CopyAndRename targetFolder copyDirectory copyFolderName
  • Haskell 中有自定义预处理器的示例吗?

    我走过了阴谋集团Distribution Simple 包知道PreProcessor数据类型可用于定义自定义预处理器 但提供的例子并不是那么有用 我不知道如何调用预处理器 目前 我只是在中定义我自己的预处理器Setup hs file 有
  • php 中给定月份的下个月和上个月[重复]

    这个问题在这里已经有答案了 可能的重复 从给定日期 php 获取下个月和上个月的最佳解决方案是什么 我正在用 php 开发一个作品 在这里 我想获取给定月份的下个月和上个月 例如 mth December 我想显示 12 月的下一个和上一个
  • Rust 中如何进行错误处理以及常见的陷阱有哪些?

    我注意到 Rust 没有例外 Rust 中如何进行错误处理以及常见的陷阱有哪些 有没有办法通过加注 接住 再加注和其他东西来控制流程 我发现这方面的信息不一致 Rust 通常通过两种方式解决错误 不可恢复的错误 一旦您panic 就是这样
  • 何时/如何 - Outlet -> didSet

    我想知道 插座上的 didSet 何时 如何实际触发 例如 IBOutlet weak var modifyButton UIButton didSet modifyButton layer cornerRadius 9 当类刚刚初始化时
  • R - 在 Shiny UI 层中对文件进行 source() 处理

    我正在尝试将我的 Shiny 应用程序分解成更小的文件 以便通过 git 与同事进行协作更加容易 这个问题帮助我弄清楚如何source 通过使用将文件添加到我的 server rsource local T 现在我正在尝试对我的 UI 层做
  • 为什么这个函数返回一个(拥有的)值?

    代码 从 Genie 如何将字符串作为字符串数组重复 N 次Genie 如何将字符串作为字符串数组重复 N 次 def repeatwithsep e string n int separator string string var ele