问题标签 [temporary-objects]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
2111 浏览

c++ - SWIG 的 Python 包装器中临时对象的生命周期(?)

2月12日编辑

我最近刚刚为一些 C++ 类使用一些 SWIG 生成的 Python 包装器出现了一个奇怪的崩溃。看来 SWIG 和 Python 结合在一起有点急于清理临时值。事实上,如此渴望,以至于它们在仍在使用时就被清理干净了。一个显着压缩的版本如下所示:

我在 .i 文件上运行 SWIG (1.3.37),然后在 Python 中,有:

似乎在第二种情况下,临时对象在我们到达 read的字段Bar之前就被销毁了。在 gdb 中追逐东西,这显然是正在发生的事情。因此,当我们从 中读取时,C++ 已经销毁(并被其他一些堆分配覆盖)。在我的实际情况下,这会导致段错误。theFoovalue.valueBar().theFoo.theFoo

是否有任何 SWIG 指令或技巧可以添加到我的Example.i文件中以在此处Bar().theFoo.value返回1

0 投票
3 回答
615 浏览

c++ - 初始化器究竟是什么时候被临时销毁的?

在回答了一些问题后,我今天构建了这个实验

b在通过动态初始化false将其设置为之前具有值(由零初始化产生)。true如果在初始化完成之前临时被销毁b,我们将打印false,否则true

规范说临时在完整表达式结束时被销毁。这似乎与b. 所以我想知道

  • 规范是否允许实现在不同的运行中false同时打印?true

上面的Clang 打印false,而 GCC 打印true. 这让我很困惑。我是否错过了一些定义订单的规范文本?

0 投票
3 回答
826 浏览

c++ - c++临时对象问题

这两个函数之间创建的临时对象的数量是否存在差异?

这是一个家庭作业问题,所以请假设没有编译器优化。

0 投票
3 回答
5122 浏览

java - 如何在 Java 中将句子存储在临时数组中?

目前,我正在从文本文件中刮出一大块数据(段落/字符串)并将其写入新文件。但是,我计划稍后添加一些条件,因此希望能够取出这块数据并将其仅存储在临时数组中,然后在满足条件时写入文件。但是,我不确定如何在事先不知道数组大小的情况下将其写入数组。

有没有人有任何想法?

0 投票
1 回答
269 浏览

c++ - N3290 C++ 草案中的临时生命周期

N3290 C++ 草案中的一点,第 12.2 节,第 5 点,第 10 行。

第二个上下文是引用绑定到临时的。引用绑定到的临时对象或作为引用绑定到的子对象的完整对象的临时对象在引用的生命周期内持续存在,但以下情况除外:

临时绑定到 new-initializer (5.3.4) 中的引用将持续到包含 new-initializer 的完整表达式完成为止。[ 例子:

—结束示例] [注意:这可能会引入悬空引用,鼓励实现在这种情况下发出警告。——尾注]

这是与 C++03 相比的附加点。但是这个例子对我来说是无法理解的。你能用任何其他例子解释这一点吗?

我知道什么是悬空引用和临时对象,它们std::pair包含两个可能不同数据类型的值。

0 投票
2 回答
225 浏览

scala - 在哈希表上使用get()方法时的scala速度?(是否生成了临时 Option() 对象?)

我正在将一些代码转换为 Scala。它是位于具有大量数据的内部循环中的代码,因此它需要快速,并且它涉及在哈希表中查找键和计算概率。它需要根据是否找到密钥来做不同的事情。使用“标准”习语,代码看起来像这样:

但我担心这种代码会非常慢,因为所有这些临时 Some() 对象都被创建然后被垃圾收集。Scala2e 书声称智能 JVM“可能”优化这些内容,以便代码在效率方面做正确的事情,但是使用 Sun 的 JVM 真的会发生这种情况吗?有人知道吗?

0 投票
6 回答
1052 浏览

c++ - 忽略函数的引用返回结果

假设我有一个返回一个重要结果和几个不重要结果的函数。我声明了它,以便通过引用返回不重要的结果:

我想调用这个函数来计算一些东西,但是在调用站点我想忽略不重要的结果。我可以这样做:

我想考虑另一种不声明虚拟变量的方法:

这有内存泄漏(不可接受),但比“虚拟”名称更清楚地显示我的意图(忽略结果)具有优势。

那么,如果我这样写会发生什么:

合法吗?执行函数代码时,临时整数是否仍然存在?我应该使用unique_ptr而不是auto_ptr吗?

(请不要建议重构我的代码;我可能会 - 但首先我想了解这些东西是如何工作的)

0 投票
2 回答
603 浏览

c++ - 我是否正确地说 const_cast 然后修改绑定到临时的 ref-to-const 可以吗?

我想检查一下我对此事的理解和结论。


在 IRC 上,有人问:

绑定到临时对象const_cast的引用是否可以接受?const

翻译:他有一个 ref-to-const 绑定到一个临时的,他想抛弃它的const-ness 来修改它。

我的回答是我之前问过一个类似的问题,其中的共识似乎是临时工本身并不是天生const的,因此您可以摆脱const对他们的引用的-ness,并通过结果修改它们. 而且,只要那个原始的 ref-to-const仍然存在,这不会影响临时的生命周期。

那是:

我对吗?


(当然,这样的代码是否真的可取完全是另一回事!)

0 投票
4 回答
1359 浏览

c++ - static_cast 和临时创作(最终版)

先决条件: 要理解这个问题,请先阅读以下问题及其答案: Cast auto_ptr<Base> to auto_ptr<Derived>

将 auto_ptr<Base> 转换为 auto_ptr<Derived> 时,Steve 回答说:“您的 static_cast 会将 auto_ptr 复制到临时对象,因此 aS 将被重置,并且当临时对象存在时(在语句末尾),资源将被销毁。 "

我对static_cast调用时的临时创建过程感兴趣。我想拥有可以跟踪的代码以查看此效果。我不能使用static_cast<auto_ptr<Circle>> ...,因为它无法编译,所以我需要编写一些模拟类而不是auto_ptr观看临时创建的过程。

我也明白临时创建与复制构造函数调用密切相关。 的所有权丢失是通过将源字段设置为负值auto_ptr的复制分配来模拟的(我需要 的简单逻辑模型)。_radiusauto_ptr

所以,我建议以下Circle课程:

行。在这里我们可以看到“所有权转移”正在发生c2 = c3。但我无法在static_cast.

问题是:如何对临时对象的创建进行小模拟static_cast

我相信史蒂夫是在铸造时创建的临时对象。我唯一想要的是编写一个显示临时创建的示例。这个目标有学术原因。

有人可以澄清如何达到史蒂夫在提到的主题上发布的答案中描述的效果吗?

0 投票
7 回答
239 浏览

c++ - RValue 由什么构成?

RValues 是不可操作的内存区域,所以像整数这样的文字被认为是 RValues。

  1. 常量是否构成 RValues?const int x = 0;至少可以操作一次。
  2. 现在,编译器创建的临时对象也是 RValue,即使它们具有可操作的内存区域。为什么呢?
    因为它们不能被“用户”修改?这是原因吗?

那么,“用户”无法操作的内存区域称为 RValue 吗?